我有以下实体,并且使用 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 中的建议使用不同的级联选项 - 外键仅包含复合主键中的一个字段? 但没有运气。