@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数据一起获取?
Hibernate无法像代理@ToMany关系中的Sets / Lists一样代理自己的对象,因此延迟加载不起作用。
@ToMany
我认为此链接可能有助于理解您的问题:http : //justonjava.blogspot.co.uk/2010/09/lazy-one-to- one-and-one-to-many.html