最佳答案
我面临的问题是,一对一的延迟加载不工作在冬眠。我有 已经解决了,但仍然 不要适当 明白发生什么。
我的代码(延迟加载在这里不起作用,当我提取 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;
}
但是 : 如果我在 OneToOne 关系中添加 optional=false
,延迟加载 没问题!
@OneToOne(mappedBy="person", cascade=CascadeType.ALL, optional = false, fetch = FetchType.LAZY)
private Adress address;
问题/条约: 请解释一下 optional=false
注释是如何帮助实现延迟加载的。
我读过 邮政编码1和 邮政编码2的文章,明白了为什么简单的 OneToOne 不能偷懒,但我还是不能掌握 optional=false
的魔力。