双向映射做得对吗?

时间:2012-04-11 00:18:03

标签: java hibernate

有人可以告诉我这是否是进行双向映射的正确方法?

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

2 个答案:

答案 0 :(得分:2)

  1. 是的,您的关系/映射已正确注释。删除Item不会删除其关联的User。删除User会删除与该用户关联的每个Item

  2. 您不需要自己双向链接它们(尽管这样做没有任何害处),至少不是在获取存储在数据库中的正确信息方面。请注意,当数据库操作从User级联到Item(而不是反之亦然)时,您可能希望调用persist(user)而不是{{1 }}。只要您将其添加到persist(item)的列表中,这将自动保留item

答案 1 :(得分:0)

如果您不想删除它们但希望保存,请使用CascadeType.PERSIST或MERGE。