3

JPA 2、Eclipselink 2.3.2

@ElementCollection主に2つではなく2つで三項関係をモデル化しようとしているので、@ Entityの代わりに@OneToManyjunctionオブジェクトを作成し、ネストされたオブジェクトにを必要としないようにすることができます。@Embeddable@Id

例えば

@Entity
public class Project {
   @ElementCollection
   @CollectionTable(name="assignment", joinColumns=@JoinColumn(name="project_id"))
   public Set<Assignment> assignments;
}

@Entity
public class Employee {
   @ElementCollection
   @CollectionTable(name="assignment", joinColumns=@JoinColumn(name="employee_id"))
   public Set<Assignment> assignments;
}

@Embeddable
public class Assignment {
  @ManyToOne
  @JoinColumn(name="employee_id")
  public Employee employee;

  @ManyToOne
  @JoinColumn(name="project_id", insertable=false, updatable=false)
  public Project project;
}

永続化するために、右を参照してAssignmentインスタンスをインスタンスに追加しています。これは正常に機能します。ProjectEmployee

さらに、ProjectsのリストEmployeeも問題なく参照できます。

ただしleft join fetch、のようなクエリを使用して従業員をロードすると、DBクエリが実際に結合を実行し、データが返されていることがわかりますがselect e from Employee e left join fetch e.assignments関連付けられた割り当て/プロジェクトオブジェクトはロードされません。

どういうわけleft join fetchか適切に相互作用しない上記のマッピングについてはどうですか?

left join fetch私は問題なく単純なマッピングで使用した@ElementCollectionので、問題は何であるか疑問に思います。

ありがとう!

4

0 に答える 0