私は以下の2つのクラス(およびそれらのpkクラス)をこれらのアノテーションとともに使用しています。私はセッター/ゲッター/ハッシュコードは/例多対多JPA Hibernateマッピング複合キーの結合テーブルエラー
私は最終的にこのエラー
org.hibernate.MappingException: Repeated column in mapping for collection: com.stackOverflow.Features.thingCategory column: YEAR
を取得していますを圧縮するために等しい削除
私の推測では、「年」は、結合テーブルに共有されているので、私はめちゃめちゃているということです私のエンティティを関連付けるための構文をいくつか作成します。これらは、エンティティ間の暗黙の関係を持つビューであり、注釈でモデル化しようとしているビューです。モデリング後に同じエラーが表示されるJPAモデリングツールをいくつか試しました。私は、insertable
とupdatable
からfalse
に結合列を設定しようとしました。
私はもちろんSQLクエリを書くことはできますが、これはHibernateで私にとってどれほど難しいかには本当に驚きました。
機能エンティティ
@Entity
@Table(name = "myTableOfFeatures")
public class Feature {
private static final long serialVersionUID = 1L;
@EmbeddedId
private FeatureKey id;
@Column(name="displayText")
private String description;
//bi-directional many-to-many association
@ManyToMany
@JoinTable(
name="joinTableToThingCategories"
, joinColumns={
@JoinColumn(name="name", referencedColumnName="name", insertable = false, updatable = false),
@JoinColumn(name="year", referencedColumnName="year", insertable = false, updatable = false)
}
, inverseJoinColumns={
@JoinColumn(name="year", referencedColumnName="year", insertable = false, updatable = false),
@JoinColumn(name="title", referencedColumnName="title", insertable = false, updatable = false)
}
)
private List<ThingCategory> thingCategory;
public Feature() {
}
// ... gets and sets
}
@Embeddable
public class FeatureKey implements Serializable {
//default serial version id, required for serializable classes.
private static final long serialVersionUID = 1L;
@Column(name="name")
private String myName;
private String year;
public FeatureKey() {
}
// ... gets and sets and equals and hashes
}
ThingCategoryエンティティ
@Entity
@Table(name = "CategoriesOfThings")
public class ThingCategory implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
private ThingCategoryKey id;
private String comment;
//bi-directional many-to-many association to categories
@ManyToMany(mappedBy="thingCategory")
private List<Feature> features;
public ThingCategory() {
}
// ... gets and sets
}
@Embeddable
public class ThingCategoryKey implements Serializable {
//default serial version id, required for serializable classes.
private static final long serialVersionUID = 1L;
private String year;
@Column(name="categoryName")
private String title;
public ThingCategoryKey() {
}
// ... gets and sets and equals and hashes
}
わかりません。 @MapsId( "myName")と@MapsId( "title")を追加することができます。これを確認してくださいhttp://stackoverflow.com/questions/16775055/hibernate-embeddedid-join 私はそれが役立つことを教えてください。 – mariusz2108
助けてくれてありがとう!その宣言をどこに追加しますか?関係について? – TheNorthWes
いいえ、@MapsIdで動作しません – mariusz2108