1

5 つの MySQL テーブルがあります

  • employee
  • qualification
  • institute qualification_institute(id, 資格_id, 機関_id)
  • employee_qualification_institute(従業員_id、資格_機関_id)

qualification_institute取得可能な資格と機関の間の多対多の関係を定義しemployee_qualification_institute、特定の従業員がどの機関で資格を取得したかを示します。EclipseLinkはクラスにSet<QualificationInstitute>フィールドを生成しますが、代わりに が必要です。そのマップにどのように注釈を付ける必要がありますか? プロパティ ベースのアクセス権を持っているので、getter メソッドにクエリを実装する必要がありますか?EmployeeMap<Qualification, Institute>

クラスにはQualificationすでにSet<Institute>フィールドが含まれていますが、クラスInstituteにはSet<Qualification>. 内Employeeでマップに注釈を付けることができれば、明示的なクラスを持たなくても済むかもしれませんEmployeeQualificationInstitute

4

1 に答える 1

1

この場合、できません。設計上、資格は機関ごとに一意ではないためです。そして、Map の JavaDoc から引用します。

キーを値にマップするオブジェクト。マップに重複キーを含めることはできません。各キーは、最大で 1 つの値にマップできます。

ただし、EmployeeQualificationInstitute クラスは必要ありません。

例:

@Entity
public class Employee
{
    @Id
    @GeneratedValue
    private Long id;
    @JoinTable(name="EmployeeQualificationInstitute",
        joinColumns={
            @JoinColumn(name = "id", referencedColumnName = "employee_id")
        }
    )
    private Set<QualificationInstitute>
}

@Entity
public class Qualification
{
    @Id
    @GeneratedValue
    private Long id;
}

@Entity
public class Institute
{
    @Id
    @GeneratedValue
    private Long id;
}

@Entity
public class QualificationInstitute
{
    @EmbeddedId
    private QualificationInstitutePK key;

    @MapsId(value = "qualification_id")
    @ManyToOne
    @JoinColumn(name = "qualification_id", referencedColumnName = "id")
    private Qualification qualification;

    @MapsId(value = "institute_id")
    @ManyToOne
    @JoinColumn(name = "institute_id", referencedColumnName = "id")
    private Institute institute;
}

@Embeddable
public class QualificationInstitutePK
{
    @Column(name = "qualification_id")
    private Long qualification_id;

    @Column(name = "institute_id")
    private Long institute_id;
}
于 2012-06-06T17:12:01.817 に答える