我遇到了一个问题,即一对一的延迟加载在休眠状态下不起作用。我已经解决了它,但是仍然无法正确理解会发生什么。
我的代码(延迟加载在这里不起作用,当我拉人时-地址也被获取):
@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关系,则延迟加载可以正常工作!
@OneToOne(mappedBy="person", cascade=CascadeType.ALL, optional = false, fetch = FetchType.LAZY)
private Adress address;
问题/完整性:请向我解释optional=false
注释如何帮助实现延迟加载。
PS我已经阅读了post1和post2的帖子,并了解了为什么简单的OneToOne不能偷懒,但是我仍然无法掌握optional=false
魔术。
same table
这样,所以我使用@OneToOne关系。尽管我使用了LAZY fetchType,但似乎无法正常工作。当我放时optional=false
,它起作用。任何解释将不胜感激。