我遇到了一个问题,即在 Hibernate 中 一对一的懒加载 不起作用。我已经解决了这个问题,但仍然不太理解发生了什么。
我的代码(此处懒加载无效,当我拉取 Person 时,Address 也被获取):
@Entity
public class Person{
@Id
@SequenceGenerator(name = "person_sequence", sequenceName = "sq_person")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "person_sequence")
@Column(name = "id")
private long personID;
@OneToOne(mappedBy="person", cascade=CascadeType.ALL, fetch = FetchType.LAZY)
private Adress address;
//.. getters, setters
}
@Entity
public class Address {
@Id
@Column(name="id", unique=true, nullable=false)
@GeneratedValue(generator="gen")
@GenericGenerator(name="gen", strategy="foreign", parameters=@Parameter(name="property", value="person"))
private long personID;
@PrimaryKeyJoinColumn
@OneToOne
private FileInfo person;
}
但是:如果我在一对一关系中添加 optional=false
,懒加载正常工作!
@OneToOne(mappedBy="person", cascade=CascadeType.ALL, optional = false, fetch = FetchType.LAZY)
private Adress address;
问题/请求:请解释一下 optional=false
注解如何帮助实现延迟加载。
P.S.我已经阅读了post1和post2中的文章,并了解了简单的 OneToOne 为什么不能是延迟加载,但我仍然无法理解 optional=false
的神奇之处。
optional=false
时,它就起作用了。任何解释都会受到真正的赞赏。 - emeraldhieu