@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一样代理您自己的对象,因此延迟加载不起作用。

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

关于java - 为什么延迟加载无法在一对一关联中工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21499580/

10-10 14:46