我有一个Role
可以引用一组Permission
s。
如何在两个类中注释以适合组合(而非聚合),其中:
Permission
是Role
,则Role
仍然存在
删除?Permission
没有{{1}},则{{1}}继续存在。P.S:如何通过合并/持久来处理?
答案 0 :(得分:1)
这是与ManyToMany
注释的@ManyToMany
关系。如果需要unidirectional ManyToMany
,则只需注释与Role
相关的Permission
类的成员字段或getter方法(分别取决于访问类型字段或属性)。如果您需要bidirectional
关系,则必须注释两个类并在非拥有/目标端指定mappedBy
注释属性,Permission
类。
要实现此关系,如果尚未存在join table
,则会创建@JoinTable
(如果存在,则可能需要Role
来指定确切的表名和列名。)
关于持久性和合并,当Permissions
持久化/合并时,关联的mappedBy
也将被持久化/合并,并且连接表中的关联条目将被创建为多对多关系默认情况下,所有者方操作是级联的(所有者方是没有@Entity
public class Role {
....
@ManyToMany
private Set<Permission> permissions;
....
@Entity
public class Permission{
.....
@ManyToMany(mappedBy="permissions")
private List<Role> roles;
....
属性的一方)。
因此,双向多对多的设置就像是,
{{1}}
还要查看规范http://download.oracle.com/otndocs/jcp/persistence-2_1-fr-spec/index.html 这本精彩的书http://www.apress.com/9781430219569