Каскадное удаление из таблицы соединений с аннотацией @ManyToMany - PullRequest
3 голосов
/ 31 декабря 2010

Привет, у меня проблема с отображением моих сущностей.Я использую JPA2 и реализацию Hibernate.Я получил таблицы с аннотацией @ManyToMany

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

Я сопоставил их с:

@Entity
@Table("employee")
class Employee {
      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      private Integer id;

  @Column
  private String name; 

  @ManyToMany
  @JoinTable(name = "proj_emp",
             joinColumns = @JoinColumn(name = "employee_id", referencedColumnName = "id"),
             inverseJoinColumns = @JoinColumn(name = "project_id", referencedColumnName = "id"), 
             uniqueConstraints = @UniqueConstraint(columnNames = {"employee_id", "project_id"})) 
  private List<Project> projects;                ...}


@Entity
@Table("project")
class Project {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Integer id; 

   @Column  
   private String name;    
      
   @Column    
   private Integer budget;        

   @ManyToMany(mappedBy = "projects")     
   private List<Employee> employees;                ...}

Теперь я хотел бы иметь каскадное удаление из таблицы proj_emp, когда яудалите записи из Employee, но ничего из таблицы Project удалить нельзя.

Каков наилучший способ получить это?

Спасибо, Давид

1 Ответ

3 голосов
/ 31 декабря 2010

Вы можете разделить ваше @ManyToMany на @ OneToMany-ManyToOne и установить каскадный стиль, как показано здесь Хотя в вопросе используется сеанс Hibernate, вы можете использовать JPA EntityManager.Или используйте новую функцию JPA @ ElementCollection (только JPA 2) для сопоставления вашего присоединенного класса.Смотрите здесь как.Просто замените @CollectionOfElements в Hibernate на @ ElementCollection

...