具有复合键的 JPA ManyToOne
Posted
技术标签:
【中文标题】具有复合键的 JPA ManyToOne【英文标题】:JPA ManyToOne with composite key 【发布时间】:2014-06-23 08:04:42 【问题描述】:我有一个品牌实体的模型映射:
@Entity
public class Brand implements Serializable
private static final long serialVersionUID = 1L;
@EmbeddedId
private BrandPk id;
//...
复合键是:
@Embeddable
public class BrandPk implements Serializable
private static final long serialVersionUID = 1L;
private int id1;
private int id2;
//...
现在我想加入一个产品实体(一个品牌,多个产品):
我会:
@Entity
public class Product implements Serializable
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@ManyToOne
// ???
private Brand brand;
//...
我需要什么才能正确加入我的表实体?
table_brands 有一个由两个字段组成的 PK:id1 和 id2 table_products 有一个带有 id 的 PK,以及一个字段 id_brand 仅引用 id1。
id2 不再使用,根本不重要!
此映射适用于我无法更改的遗留数据库,因此我需要加入“忽略”id2。 我该怎么办?
【问题讨论】:
@ManyToOne @JoinColumn(name="id_brand")
... 导致原因:org.hibernate.AnnotationException: A Foreign key refering model.Brand from model.Product 的列数错误。应该是 2"
【参考方案1】:
如果你添加另一列说 id_brand2 指代 id2,你可以试试这个:
@ManyToOne
@JoinColumns(
@JoinColumn(name="id_brand", referencedColumnName="id1"),
@JoinColumn(name="id_brand2", referencedColumnName="id2")
)
private Brand brand;
【讨论】:
以上是关于具有复合键的 JPA ManyToOne的主要内容,如果未能解决你的问题,请参考以下文章