1

私は 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 テーブルの各行は、指定された 2 つのリビジョン間の変更を表し、主キーは 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 をコメントアウトしたときでした。次に、2 番目の alter ステートメントが生成されますが、期待どおり、(appKey ではなく) oldRevision 値のみが含まれています。これを達成する方法についての考えや提案をいただければ幸いです。

4

1 に答える 1