我遇到了這樣的問題:一對一延遲加載在hibernate中不起作用。我已經解決了它,但仍不正確瞭解會發生什麼。休眠:一對一延遲加載,可選= false
我的代碼(延遲加載這裏行不通,當我拉人 - 地址也獲取):
@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", [email protected](name="property", value="person"))
private long personID;
@PrimaryKeyJoinColumn
@OneToOne
private FileInfo person;
}
但:如果我在OneToOne關係添加optional=false
,懶惰loading 正常工作!
@OneToOne(mappedBy="person", cascade=CascadeType.ALL, optional = false, fetch = FetchType.LAZY)
private Adress address;
問題/懇求:請向我解釋optional=false
註釋如何幫助實現延遲加載。
P.S.我讀過的帖子post1和post2,並瞭解爲何僅是簡單OneToOne不能偷懶,但我還不能掌握optional=false
魔術。
嘿@Volodymyr,我和你有同樣的問題。我試圖從實體中分離出一個BLOB列。父實體具有子實體。子實體包含二進制列。父母和孩子是'相同的表',所以我使用@OneToOne關係。雖然我使用LAZY fetchType,但它似乎不起作用。當我把'可選=假',它的作品。任何解釋將真正讚賞。 – Emerald214
@ Emerald214對不起,那是2年前。目前我正在寫JS Mobile,並且不能幫助您 –
OneToOne可選= false與CascadeType.PERSIST無效 請參閱: https://hibernate.atlassian.net/browse/HHH-9670 – sliver