我使用的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
是的,我試過了,不幸的是我得到了同樣的結果。 –