2014-01-07 136 views
0

我試圖映射實體,所以我將有以下或類似的效果(最好不OrderItem.quantity):的Hibernate映射列表

enter image description here

這裏是我的實體:

public class Orders implements Serializable { 
private static final long serialVersionUID = 1L; 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Long id; 
@ManyToOne 
private UserCreds user; 
@OneToMany 
private List<Item> orderedItems; 

我結束了與OrdersItem連接表映射只有2列: item_idorder_id,都是鍵 因此它不會讓我堅持重複項目的順序。添加ID列的OrderItems應該做的伎倆:

OrdersItem table that I except: 
| ID | ORDER_ID | ITEM_ID 
    1 25   31 
    2 25   31 
    3 25   12 
    4 25   12 
    5 25   62 

等。 但我就是不可能得到那個工作,也許我的解決方案是完全錯誤的?

回答

0

在這裏使用元素集合可能是更好的選擇。元素集合對於提供與屬性的關係非常有效。

它可能看起來像這樣在你的Orders類:

@ElementCollection 
private Map<Item, Integer> itemQuantities = new HashMap<Item, Integer>(); 

編輯:您可以使用@ElementCollection類型Map的是基本型或EmbeddableInteger是一個基本類型。

如果你決定使用一個實體作爲類型Map的,你必須使用@OneToMany@ManyToMany

關鍵類型對這種情況下的註釋選擇沒有任何影響,所以你可以使用ItemLong作爲關鍵字,而不必更改註釋。但是,這會影響您可以使用的物理貼圖註釋。

+0

「JPA 2.0規範明確指出@ ElementCollection適用於基本類型和可嵌入類型」,我認爲我需要兩個類作爲@ Entity。下面的解決方案導致 org.hibernate.AnnotationException:使用@ OneToMany或@ ManyToMany以未映射的類爲目標:Entity.Orders.itemQuantities [java.lang.Integer] (targetClass)將不會幫助 – stzmk

+0

不完全請參閱編輯 – kostja