spring 3.1、hibernate 4.0.1.FINAL、および spring-data-jpa 1.0.2.RELEASE を使用しています。many-to-many
では、 と の間に があり、 としてマッピングしたclass A
としましょう。また、 と の間に別の多対多が あり、としてマップされます。@Embeddable アノテーションが付けられたクラスがありますclass B
ABMap
class C
class D
CDMap
ABMapID
@Embeddable
public class ABMapID{
private String aID;
private String bID;
}
//... setters and getters
したがって、マッピング自体は以下のとおりです
@Entity
public class ABMap {
@Id
@AttributeOverrides({
@AttributeOverride(name = "aID", column = @Column(name = "a_id",insertable = false, updatable = false)),
@AttributeOverride(name = "bID", column = @Column(name = "b_id", insertable = false,updatable = false))
})
private ABMapID ID;
@ManyToOne(targetEntity = A.class)
@JoinColumn(name = "a_id",insertable = false,updatable = false)
private A a;
@ManyToOne(targetEntity = B.class)
@JoinColumn(name = "b_id", insertable = false, updatable = false)
private B b;
//.... setters and getters
}
ここで、 を aID で構成される場所に変更しABMap
、CDMapID (それ自体は cID、dID で構成される) に変更するとします。私の新しい関連付けIDはACDMapIDですACDMap
ACDMapID
@Embeddable
public class ACDMapID {
private String aID;
private CDMapID cdmapID;
}
and the entity is mapped like so
@Entity
public class ACDMap {
@Id
@AttributeOverrides({
@AttributeOverride(name = "aID", column = @Column(name = "a_id",insertable = false, updatable = false)),
@AttributeOverride(name = "cdmapID", column = @Column(name = "dcmap_id", insertable = false,updatable = false))
})
private ACDMapID ID;
}
これを実行すると、このエラーが発生します
原因: org.hibernate.AnnotationException: ACDMap から CDMap を参照する外部キーの列数が正しくありません。2である必要があります
そのマッピングを行う方法はありますか?望ましいのは、CDMap をそのままにしておきたいということです。