3

次のエンティティがあり、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つのフィールドのみを含む外部キー? しかし、運はありませんでした。

4

0 に答える 0