有人可以告诉我这是否是进行双向映射的正确方法?
class User {
@OneToMany(cascade=CascadeType.ALL, mappedBy="user")
private List<item> items;
}
class Item {
@ManyToOne
private User user;
}
现在,如果我删除一个Item,我不希望删除该用户。 如果删除用户,我希望删除其关联项,因为它对用户来说是唯一的。
还有一个问题:如果我创建一个Item,我会这样做:
User user = new User();
Item item = new Item();
user.getItems().add(item);
item.setUser(user);
persist(item);
我是否必须同时将项目设置为用户,并且用户对项目设置相反?
TY
答案 0 :(得分:2)
是的,您的关系/映射已正确注释。删除Item
不会删除其关联的User
。删除User
会删除与该用户关联的每个Item
。
您不需要自己双向链接它们(尽管这样做没有任何害处),至少不是在获取存储在数据库中的正确信息方面。请注意,当数据库操作从User
级联到Item
(而不是反之亦然)时,您可能希望调用persist(user)
而不是{{1 }}。只要您将其添加到persist(item)
的列表中,这将自动保留item
。
答案 1 :(得分:0)
如果您不想删除它们但希望保存,请使用CascadeType.PERSIST或MERGE。