度過了我的方式太熱門從昨天的問題:JPA映射一個地圖實體
Hibernate(JPA) mapping a 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
模型,儘管我覺得這不是非常模塊化(即信息不是真正的用戶帳戶信息)。自動櫃員機,這張地圖坐落在一個類似公用事業的購物類中,該購物類負責將購物車與購物者相匹配,從而使我無法使User
模型變得太大。 (這裏有更好的模式嗎?)
假設我繼續沿着這條路走,試試這個Map
。理想情況下,我希望能夠按原樣映射它。雖然我沒有那麼幸運。
我偶然發現了一些關於映射ArrayList
的討論,因爲它是Serializable
,儘管在這裏沒有設法實現。
所以我做了一個包裝單位:
@Entity
public class POJOWithCompositeList extends Model {
@OneToMany
List<POJOWithComposite> list = new ArrayList<POJOWithComposite>();
}
這工作。當我使用這個實體就是這樣,我可以映射我的新:
@ManyToMany
Map<User, POJOWithCompositeList>
雖然我真的不喜歡這個解決辦法,因爲我再添映射的實體,即包裝企業指的是在數據庫中,這意味着另一個表另加入每個查詢等...
所以我的兩個問題是:
- 從設計的角度來看,是一個實用程序類堅持這個
Map
接受嗎? - 假設我們這樣映射模型,我該如何改進映射?
Map屬於哪個實體? –
2011-03-11 19:54:25
@JB Nizet,它自己的實體,它應該是一個類似單實體的實體(即只有一個實例,該實例擁有該映射)。誠然不漂亮。 – davin 2011-03-11 19:57:44