【发布时间】:2014-07-10 18:03:41
【问题描述】:
我有下一段感情:
目前,我有下一个代码:
@Embedded
public class StockPK implements Serializable {
private int storeId;
private int productId
}
@Entity
public class Stock implements Serializable {
@EmbeddedId
private StockPK id;
private int cantidad;
@ManyToOne
private Store store;
@ManyToOne
private Product product;
}
但是生成的 DDL(我在 TomEE 中使用 OpenJPA)添加了两个附加字段。
CREATE TABLE STOCK (
productId INTEGER NOT NULL,
storeId INTEGER NOT NULL,
quantity INTEGER NOT NULL,
PRODUCT_ID INTEGER ,
STORE_ID INTEGER ,
PRIMARY KEY (productId, storeId)
)
应该如何指定这种关系?
【问题讨论】:
-
docs.oracle.com/javaee/6/api/javax/persistence/MapsId.html。但我强烈建议您避免使用复合主键,并向您的 Stock 实体添加自动生成的 ID。
-
@JBNizet 谢谢。但是...如何避免与您的提案重复?
-
通过在
(storeId, productId)上添加唯一约束。 -
@JBNizet 我正在使用 MySQL。如果我使用复合主键,对性能有影响吗?以另一种方式,使用
MapsId有效。谢谢! -
单个数字键上的索引比两个键上的索引快。但主要缺点不是性能。这是可用性。
标签: java sql mapping jpa-2.0 openjpa