簡體   English   中英

JPA映射實體圖

[英]JPA Mapping a Map of Entities

從昨天開始我廣受歡迎的問題:

Hibernate(JPA)映射HashMap

我正在嘗試映射本質上如下的結構:

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>

盡管我不太喜歡這種解決方案,因為我添加了另一個映射實體,即包裝實體意味着數據庫中的另一個表,這意味着每個查詢都需要另一個聯接等。

所以我的兩個問題是:

  1. 從設計角度來看,將此Map粘貼在util類中是否可以接受?
  2. 假設我們確實像這樣映射模型,如何改善映射?

創建單例實體沒有意義。 您應該簡單地映射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.

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