我使用的EclipseLink 2.4.0,我试图找到一种方法来生成以下DDL语句:如何创建多个引用同一个表的复合外键约束?
ALTER TABLE DELTA ADD CONSTRAINT DELTAFK1 FOREIGN KEY (APPKEY, NEWREVISION) REFERENCES REVISION (APPKEY, REVISION);
ALTER TABLE DELTA ADD CONSTRAINT DELTAFK2 FOREIGN KEY (APPKEY, OLDREVISION) REFERENCES REVISION (APPKEY, REVISION);
在DELTA表的每一行表示两个指定的修订和主键之间的变化由APPKEY,NEWREVISION和OLDREVISION组成。仅正在与所述Delta.java类中定义的以下关系注释生成的第一ALTER语句:
public class Delta {
@EmbeddedId
private DeltaPK deltaPk;
@ManyToOne
@PrimaryKeyJoinColumns({
@PrimaryKeyJoinColumn(name="appKey", referencedColumnName="appKey"),
@PrimaryKeyJoinColumn(name="newRevision", referencedColumnName="revision")
})
private Revision newRevision;
@ManyToOne
@PrimaryKeyJoinColumns({
@PrimaryKeyJoinColumn(name="appKey", referencedColumnName="appKey"),
@PrimaryKeyJoinColumn(name="oldRevision", referencedColumnName="revision")
})
private Revision oldRevision;
每个PrimaryKeyJoinColumn的名称值,“的AppKey”,“oldRevision”和“newRevision”是各个领域的在DeltaPK类中定义,并且referencedColumnName值是Revision类中定义的字段。
我已经尝试了一堆变体,而且我得到的最接近的是当我注释掉oldRevision对象的'appKey'的PrimaryKeyJoinColumn。然后生成第二个alter语句,但它只包含oldRevision值(不是appKey),就像您所期望的那样。任何想法或建议如何做到这一点将不胜感激。
您是否尝试过使用joincolumn批注并使其可插入= false,updateable = false而不是PrimaryKeyJoinColumn批注? – Chris
是的,我试过了,不幸的是我得到了同样的结果。 –