@JBNizet の提案がうまくいけばいいですね。残念ながら、私が使用しているバージョン (3.3.1-GA) では採用できない古いバグがあります。
@IdClass
内部静的 ID クラスを定義し、それを次のように使用して、最終的にこれを整理しました。
@Entity
@Table(name="TABLE_AB")
@IdClass(value=ClassAB.ClassABId.class)
public class ClassAB implements Serializable {
private String idA;
private String idB;
@Id
public String getIdA(){ return idA; }
public void setIdA(String idA){ this.idA = idA; }
@Id
public String getIdB(){ return idB; }
public void setIdB(String idB){ this.idB = idB; }
static class ClassABId implements Serializable {
private String idA;
private String idB;
@Column(name="ID_A")
public String getIdA(){ return idA; }
public void setIdA(String idA){ this.idA = idA; }
@Column(name="ID_B")
public String getIdB(){ return idB; }
public void setIdB(String idB){ this.idB = idB; }
// HashCode(), equals()
}
}
この方法では、新しいパブリック クラスを定義する必要がなく、マッピング ファイルを変更して ID クラスを含める必要もありません。