使用@ManyToMany注释从连接表中级联删除

Daw*_*wid 5 annotations hibernate cascade cascading-deletes jpa-2.0

您好,我在映射实体时遇到问题。我正在使用 JPA2 和 Hibernate 实现。我得到带有 @ManyToMany 注释的表

\n\n

http://img204.imageshack.us/img204/7558/przykladd.png

\n\n

我将其映射为:

\n\n
@Entity\n@Table("employee")\nclass Employee {\n      @Id\n    \xc2\xa0\xc2\xa0@GeneratedValue(strategy = GenerationType.IDENTITY)\n    \xc2\xa0\xc2\xa0private Integer id;\n\n\xc2\xa0\xc2\xa0@Column\n\xc2\xa0\xc2\xa0private String name;\xc2\xa0\n\n \xc2\xa0@ManyToMany\n\xc2\xa0\xc2\xa0@JoinTable(name = "proj_emp",\n\xc2\xa0           \xc2\xa0joinColumns = @JoinColumn(name = "employee_id", referencedColumnName = "id"),\n\xc2\xa0            inverseJoinColumns = @JoinColumn(name = "project_id", referencedColumnName = "id"),\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0uniqueConstraints = @UniqueConstraint(columnNames = {"employee_id", "project_id"}))\xc2\xa0\n\xc2\xa0\xc2\xa0private List<Project> projects;\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0...}\n\n\n@Entity\n@Table("project")\nclass Project {\n\xc2\xa0\xc2\xa0\xc2\xa0@Id\n\xc2\xa0\xc2\xa0\xc2\xa0@GeneratedValue(strategy = GenerationType.IDENTITY)\n\xc2\xa0\xc2\xa0\xc2\xa0private Integer id;\xc2\xa0\n\n\xc2\xa0\xc2\xa0\xc2\xa0@Column\xc2\xa0\xc2\xa0\n \xc2\xa0\xc2\xa0private String name;\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0@Column\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0private Integer budget;\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n\n\xc2\xa0\xc2\xa0\xc2\xa0@ManyToMany(mappedBy = "projects")\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0private List<Employee> employees;\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0...}\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,当我从 Employee 中删除记录时,我希望从表 proj_emp 中进行级联删除,但表 Project 中的任何内容都无法删除。

\n\n

获得它的最佳方式是什么?

\n\n

谢谢\n大卫

\n

Art*_*ald 3

您可以将 @ManyToMany 拆分为 @OneToMany-ManyToOne 并设置级联样式,如下所示。虽然问题使用 Hibernate 的会话,但您可以使用 JPA EntityManager。或者使用新的 JPA 功能@ElementCollection(仅限 JPA 2)来映射您加入的类。请参阅此处如何操作。只需将 Hibernate 的 @CollectionOfElements 替换为 @ElementCollection