[英]JPA Mapping a Map of Entities
從昨天開始我廣受歡迎的問題:
我正在嘗試映射本質上如下的結構:
Map<User, List< POJOWithComposite >>
其中“ User
是基本模型,類似於以下內容:
@Entity
public class User extends Model {
public String username;
public String password;
...
}
POJOWithComposite
是另一個實體,具有一些映射的實體和一些基元,類似於:
@Entity
public class POJOWithComposite extends Model {
public int someIntField;
public OtherModel compositeEntity;
...
}
該結構可能類似於購物車。 因此, User
擁有帳戶信息, OtherModel
可以是可購買的商品,而POJOWithComposite
是包含商品和數量的購物車。 當涉及到主要對象時,我的類比略有分解,但令我感到幽默,並且說,對於每個會話,我們將用戶支付的購物車添加到列表中,然后將其存檔。
首先,如果列表屬於每個用戶,我可以將其添加到User
模型中,盡管我認為這不是非常模塊化的(即信息不是真正的用戶帳戶信息)。 在ATM上,此地圖位於類似於實用程序的購物類中,該類負責將購物車與購物者匹配,以免我將User
模型過大。 (也許在這里可以使用更好的模式嗎?)
假設我繼續走這條路,讓我們嘗試映射此Map
。 理想情況下,我希望能夠原樣映射。 盡管我的運氣很少。
我碰巧談論了映射ArrayList
因為它是Serializable
,盡管沒有在這里實現。
所以我做了一個包裝實體:
@Entity
public class POJOWithCompositeList extends Model {
@OneToMany
List<POJOWithComposite> list = new ArrayList<POJOWithComposite>();
}
這可行。 當我像這樣使用這個實體時,我可以映射我的新實體:
@ManyToMany
Map<User, POJOWithCompositeList>
盡管我不太喜歡這種解決方案,因為我添加了另一個映射實體,即包裝實體意味着數據庫中的另一個表,這意味着每個查詢都需要另一個聯接等。
所以我的兩個問題是:
Map
粘貼在util類中是否可以接受? 創建單例實體沒有意義。 您應該簡單地映射User和POJOWithComposite之間的一對多關聯。
獲取一個用戶(使用session.get()
)並調用user.getPOJOWithComposites()
以獲取給定用戶的所有POJOWithComposites。 如果您希望將其用於多個用戶,請使用HQL查找這些用戶,然后遍歷找到的用戶並導航至關聯。 單例映射是休眠會話。 使用其方法查詢數據庫。
我最終在復合部件上使用@ManyToMany
映射創建了一個新實體,如下所示:
@Entity
public class POJOWithComposites extends Model {
@ManyToMany
CompositeType compositePtr;
@ManyToMany
CompositeOtherType compositeOtherPtr;
...
}
這樣,我確實將復雜性這一元素排除在我的用戶模型之外,因為它不是核心用戶實體的一部分,並且允許進行有效的映射(外鍵)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.