3

我有以下实体,并且使用 hibernate 4.1.* 作为 JPA 提供程序,但是在映射到用户的客户表中使用复合主键给了我 com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry for key '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 中的建议使用不同的级联选项 - 外键仅包含复合主键中的一个字段? 但没有运气。

4

0 回答 0