2012-04-11 82 views
2

有人可以告訴我,如果這是做雙向映射的正確方法嗎?雙向映射做對了嗎?

class User { 
    @OneToMany(cascade=CascadeType.ALL, mappedBy="user") 
    private List<item> items; 
} 


class Item { 
    @ManyToOne 
    private User user; 
} 

現在,如果我delte項目,我不希望用戶被刪除。 如果我刪除了一個用戶,我想讓它的相關項目被刪除,因爲它對用戶是唯一的。

而另一個問題:如果我創建一個項目,我做的:

User user = new User(); 
Item item = new Item(); 

user.getItems().add(item); 
item.setUser(user); 
persist(item); 

我必須既設置的項目給用戶,並且用戶反之亦然項目嗎?

TY

回答

2
  1. 是的,你們的關係/映射正確註解。刪除Item將不會刪除其關聯的User。刪除User將刪除與該用戶關聯的每個Item

  2. 你不需要雙向鏈接它們(雖然這樣做沒有害處),至少在獲取存儲在數據庫中的正確信息方面並不需要。請注意,由於數據庫操作從User級聯到Item(和而不是反之亦然),您可能需要撥打persist(user)而不是persist(item)。只要您將其添加到user的列表中,它就會自動保留item

0

使用CascadeType.PERSIST或MERGE如果您不想讓它們被刪除但想要保存。