2012-04-11 78 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如果您不想让它们被删除但想要保存。