4

こんにちは、エンティティのマッピングで問題が発生しました。私は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;                ...}

ここで、Employeeからレコードを削除するときに、テーブルproj_empからカスケード削除したいのですが、テーブルProjectからは何も削除できません。

それを取得するための最良の方法は何ですか?

ありがとうDawid

4

1 に答える 1

3

@ManyToManyを@OneToMany-ManyToOneに分割し、ここに示すようにカスケードスタイルを設定できます。質問ではHibernateのセッションを使用していますが、JPAEntityManagerを使用できます。または、新しいJPA機能@ElementCollection(JPA 2のみ)を使用して、参加しているクラスをマップします。方法はこちらをご覧ください。Hibernateの@CollectionOfElementsを@ElementCollectionに置き換えるだけです

于 2010-12-31T01:09:04.467 に答える