次のエンティティがあり、JPAプロバイダーとしてhibernate 4.1。*を使用していますが、ユーザーにマップするcustomerテーブルで複合主キーを使用すると com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:キー'PRIMARYの重複エントリが発生します'
エンティティのマッピングは次のとおりです。
@Entity
class Customer {
@EmbeddedId CustomerId id;
boolean preferredCustomer;
@MapsId("userId")
@JoinColumns({
@JoinColumn(name = "first_name_", referencedColumnName = "first_name"),
@JoinColumn(name = "last_name", referencedColumnName = "last_name")
})
@ManyToOne(optional = false)
private User user;
-----
}
@Embeddable
private UserPK userId;
@Basic(optional = false)
@NotNull
@Column(name = "customer_number")
private int customerNumber;
----
}
@Entity
class User {
@EmbeddedId UserId id;
@Basic(optional = false)
@NotNull
@Column(name = "age")
private int age;
------
}
@Embeddable
class UserId implements Serializable {
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "first_name")
private String firstName;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "last_name")
private String lastName;
-------
}
同じマッピングがeclipselinkでも機能します。また、CustomerIdからUserIdを削除して参照するだけでも機能しますが、hibernateと@MapsIdを使用してこれを解決したいと思います。
JPA 2の提案に従って異なるカスケードオプションを使用してみました-複合主キーからの1つのフィールドのみを含む外部キー? しかし、運はありませんでした。