[英]bidirectional one-to-many with jointable
我在使用JoinTables進行雙向一對多關聯時遇到了一些問題。 這就是我得到的:
A類:
@OneToMany
@JoinTable(name="join_table",
JoinColumns={@JoinColumn(name="a_id")},
inverseJoinColumns={@JoinColumn(name="b_id")}
)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
public Set<B> getBs() {
return bs;
}
B級:
@ManyToOne
@JoinTable(name="join_table",
joinColumns={@JoinColumn(name="b_id", insertable=false,updatable=false)},
inverseJoinColumns={@JoinColumn(name="a_id", insertable=false,updatable=false)})
public A getA() {
return a;
}
如果我創建了A和B的實例,請將B的實例添加到A並保存。 有用。 但是當我重新加載A的實例並嘗試訪問B組時,它會拋出一個帶有“非法訪問加載集合”消息的LazyInitializationError。
我在哪里錯了? :)任何人都可以指向一個使用連接表的雙向關聯的例子。 如果所有權保留在A類,我已經搜索了hibernate.org上的文檔,但我似乎無法找到它。
-Daniel
您的映射是正確的,這就是條目保存在數據庫中的原因。 提取中的問題是由於惰性初始化 。
要解決它,修改A類的映射,
@OneToMany(fetch=FetchType.LAZY)
@JoinTable(name="join_table",
joinColumns={@JoinColumn(name="a_id")},
inverseJoinColumns={@JoinColumn(name="b_id")}
)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
public Set<B> getBs() {
return bs;
}
這將觸發對表B的附加查詢並初始化集合。 它可能會影響性能,具體取決於被告表中的條目數。
請閱讀此處的API以獲取更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.