2

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

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


class Item {
    @ManyToOne
    private User user;
}

现在,如果我删除一个项目,我不希望删除该用户。如果我删除一个用户,我希望删除它的关联项目,因为它对用户来说是唯一的。

还有一个问题:如果我创建一个项目,我会:

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

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

我是否必须将项目设置为用户,反之亦然设置项目?

4

2 回答 2

2
  1. 是的,您的关系/映射已正确注释。删除一个Item不会删除其关联的User. 删除 aUser将删除Item与该用户关联的所有内容。

  2. 您不需要自己双向链接它们(尽管这样做没有害处),至少在获取存储在数据库中的正确信息方面不需要。请注意,当数据库操作从 级联UserItem(反之亦然)时,您可能需要调用而不是. 这会自动持久化,只要你把它添加到列表中。 persist(user)persist(item)itemuser

于 2012-04-11T00:26:01.657 回答
0

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

于 2012-04-11T00:26:31.850 回答