我正在使用 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 类中定义的字段,而引用的ColumnName 值是在 Revision 类中定义的字段。
我尝试了很多变体,最接近的是当我注释掉 oldRevision 对象的“appKey”的 PrimaryKeyJoinColumn 时。然后生成第二个 alter 语句,但它只包含 oldRevision 值(不是 appKey),如您所料。任何关于如何实现这一点的想法或建议将不胜感激。