使用JPA和删除的组合

时间:2014-06-02 00:43:10

标签: java jpa annotations eclipselink

我有一个Role可以引用一组Permission s。

如何在两个类中注释以适合组合(而非聚合),其中:

  • 如果PermissionRole,则Role仍然存在 删除?
  • 如果Permission没有{{1}},则{{1}}继续存在。

P.S:如何通过合并/持久来处理?

1 个答案:

答案 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