Her*_*ery 49 many-to-many hibernate jpa cascade jpa-2.0
我正在使用JPA 2.0和hibernate.我有一个User类和一个Group类,如下所示:
public class User implements Serializable {
@Id
@Column(name="USER_ID")
private String userId;
@ManyToMany
@JoinTable(name = "USER_GROUP",
joinColumns = {
@JoinColumn(name = "GROUP_ID")
},
inverseJoinColumns = {
@JoinColumn(name = "USER_ID")
}
)
private Set<Group> groupList;
//get set methods
}
public class Group
{
@Id
@Column(name="GROUP_ID")
private String groupId;
@ManyToMany(mappedBy="groupList")
private Set<User> memberList;
//get set methods
}
Run Code Online (Sandbox Code Playgroud)
然后,我创建一个用户和组,然后将用户分配给该组.
我想要的是当我删除该组时,该组将被删除(当然),该组所拥有的所有用户组关系将自动从USER_GROUP连接表中删除,但用户本身不会从USER表.
使用上面的代码,当我删除一个组时,只删除GROUP表中的行,并且用户仍然会在USER_GROUP连接表中有一个已删除组的条目.
如果我将Cascade放在User类中,如下所示:
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name = "USER_GROUP",
joinColumns =
{
@JoinColumn(name = "GROUP_ID")
},
inverseJoinColumns =
{
@JoinColumn(name = "USER_ID")
})
private Set<Group> groupList;
Run Code Online (Sandbox Code Playgroud)
删除组时,用户也将被删除!
有没有办法实现我想要的?
dig*_*oel 38
它映射的方式User
是关系的管理方,因此它将负责更新连接表.
将JoinTable
映射更改User
为Group
,并使其groupList
属性User
具有mappedBy
属性.这会将组更改为关系的管理方,并使对组的持久/更新调用管理连接表.
但请注意,您将无法简单地向用户添加组,保存用户,并继续,您将不得不将用户添加到组并保存组以查看更改,但有双向多对多希望你无论如何都会密切管理这种关系.
从另一个角度看问题:
您可以向您的多对多映射表添加FK约束.实际上,出于数据完整性原因,您应始终在DB中使用FK.在这种情况下,例如,在映射表中静默留下孤立行时,至少不能删除用户.
如果有FK,则可以在约束上指定on delete cascade引用操作,DB将管理映射表的自动删除,但不会像您要求的那样管理实体的自动删除.
归档时间: |
|
查看次数: |
57520 次 |
最近记录: |