簡體   English   中英

具有連接表的雙向一對多

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM