小编典典

为什么延迟加载无法在一对一关联中工作?

hibernate

@Entity
public class Person {
    @Id
    @GeneratedValue
    private int personId;

    @OneToOne(cascade=CascadeType.ALL, mappedBy="person", fetch=FetchType.LAZY)
    private PersonDetail personDetail;

    //getters and setters
}

@Entity
public class PersonDetail {
    @Id
    @GeneratedValue
    private int personDetailId;

    @OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
    private Person person;

        //getters and setters

    }

当我做

 Person person1=(Person)session.get(Person.class, 1);

我看到两个查询被解雇了。一个用于获取人员数据,另一个用于人员详细数据。

根据我的理解,应该仅触发1个查询来获取人数据而不是人详细数据,因为我已经提到了延迟加载。为什么personDetail数据与person数据一起获取?


阅读 265

收藏
2020-06-20

共1个答案

小编典典

Hibernate无法像代理@ToMany关系中的Sets / Lists一样代理自己的对象,因此延迟加载不起作用。

我认为此链接可能有助于理解您的问题:http : //justonjava.blogspot.co.uk/2010/09/lazy-one-to-
one-and-one-to-many.html

2020-06-20