2013-05-02 51 views
0

欲樣品M模型:實體「訂單」和n之間的關係「的項目」JPA:數據存取在一個雙向M:N關係

相應的映射部分是:

訂單。 Java的:

... 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name="ORDER_ID") 
private Long orderId; 

@Column(name="ORDER_DESCRIPTION") 
private String description; 

@JoinTable(name ="ORDER_ITEMS", 
    [email protected](name="ORDER_ID", referencedColumnName="ORDER_ID"), 
    [email protected](name="ITEM_ID", referencedColumnName="ITEM_ID")) 
private Set<Item> items; 
... 

Item.java:

... 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "ITEM_ID") 
private Long itemId; 

@Column(name = "ITEM_DESCRIPTION") 
private String description; 

@Column(name = "ITEM_PRICE") 
private Long price; 

@ManyToMany(mappedBy="items") 
private Set<Order> orders; 
... 

你知道爲什麼我不能夠INVERS ely拿到一個特定項目引用的訂單?部分@ManyToMany(mappedBy =「items」)給了我一個「這種關係無效的映射類型」。我認爲我可以創建任意物品和訂單,將物品添加到訂單中,並隨後獲取與物品有關的所有訂單。

在我的情況下,item.getOrders()給了我一個NullPointerException。

非常感謝!

回答

2

很簡單,因爲你忘了加上項目多對多註釋:

@ManyToMany 
@JoinTable(name ="ORDER_ITEMS", 
    [email protected](name="ORDER_ID", referencedColumnName="ORDER_ID"), 
    [email protected](name="ITEM_ID", referencedColumnName="ITEM_ID")) 
private Set<Item> items; 
+0

你是對的,它消除了「這種關係無效的映射類型」,而不是NullPointerException異常 – 2013-05-02 09:05:02

+0

的NPE可能是由於這樣的事實那東西沒有初始化。向我們展示相關代碼,異常的堆棧跟蹤,並告訴我們它引用了哪一行代碼(通過編輯您的問題)。 – 2013-05-02 09:07:03

+0

就是這樣。我沒有在構造函數中初始化HashSet。現在它按預期工作! :)順便說一句:我刪除了@ManyToMany非擁有方「項目」。這工作finde,但現在有兩個連接表創建在牆後面。你能解釋一下嗎? – 2013-05-02 09:43:38