在我的業務領域的兩個實體Request
和Action
是在一對一的關聯作爲下:1 + N問題具有實體1-1協會
我堅持他們通過休眠。問題是,如果我將它們保存在兩張表中,我將不得不面對1 + n問題。如果我將它們保存在一個表中(通過從同一個超類繼承它們),hibernate使用鑑別器,以便它們在表的兩個不同行中結束,這意味着相同的1 + n問題。
是否有可能將這兩個實體的關聯實例保存在具有相同ID的表的同一行的不同列中?或者更好的想法來處理這種情況?
在我的業務領域的兩個實體Request
和Action
是在一對一的關聯作爲下:1 + N問題具有實體1-1協會
我堅持他們通過休眠。問題是,如果我將它們保存在兩張表中,我將不得不面對1 + n問題。如果我將它們保存在一個表中(通過從同一個超類繼承它們),hibernate使用鑑別器,以便它們在表的兩個不同行中結束,這意味着相同的1 + n問題。
是否有可能將這兩個實體的關聯實例保存在具有相同ID的表的同一行的不同列中?或者更好的想法來處理這種情況?
不,不應該使用兩個實例來表示同一行,因爲當您去刪除其中一個實體時會發生什麼?爲什麼不僅僅使用一個實體而且一個可嵌入?假設沒有請求的情況下Action不能存在,它將是可嵌入的並存在於Request表中。
你有沒有考慮懶惰動作。這將避免獲取Action,直到你確實需要它。例如,
@OneToOne(取= FetchType.LAZY,可選= TRUE)
我更喜歡一到一個解決方案,如果請求和行動都是實體。我使用標準查詢並指定加入模式來避免n + 1問題。
Criteria c = session.createCriteria(Request .class);
c.setFetchMode("action", FetchMode.JOIN)
return c.list();
然而,這是一個有點笨重,你有,如果開發許多即席查詢方法您請求的員工與多個實體。
public interface RequestRepository {
List<Request> findWithAction(Criteria criteria);
List<Request> findWithAnotherEntity(Criteria criteria);
}
我用@Embeded如果行動僅僅是一個的ValueObject,因此它們可以被存儲在一個表中。
是的,在某些情況下,它使生活更美好,但在諸如「讓所有請求沒有動作」等查詢失敗。由於我有很多這樣的實體對,所以我試圖找到最有效的方法 – WSK