私は数時間探し回っていましたが、私の場合に似たものは見つかりませんでした。
次の多対多のデータモデルを想定しましょう。
契約(任意の事業体) -contract_id -その他のフィールド パーティ(別の事業体) -party_id -その他のフィールド Contract_Party(最初の2つの と追加の役割インジケーター(所有者、署名者、販売者など)との関係) -contract_id -party_id -役割
ここで、マッピングしたいとしますallパーティに関連する契約(一方向)。これは、Party
エンティティクラスで次のアノテーションを使用して実行できます。
@OneToMany
@JoinTable(
name="Contract_Party",
joinColumns = {@JoinColumn(name="party_id", referencedColumnName="party_id")},
inverseJoinColumns = {@JoinColumn(name="contract_id", referencedColumnName="contract_id")}
}
private List<Contract> contracts;
それは結構です。
しかし、私が探しているのは、契約を特定の役割でマップする方法です。
@OneToMany
@??? ( "ROLE = 'SIGNER' ")
private List<Contract> signedContracts;
技術的には、JOINステートメントに追加条件を追加する方法を探しています。
これまでのところ、同様のトピックで次のアイデアが見つかりました。
ありがとう!
@WhereJoinTableアノテーションを使用できます。関連付けテーブルに適用されます
@OneToMany
@JoinTable(
name="Contract_Party",
joinColumns = {@JoinColumn(name="party_id",referencedColumnName="party_id")},
inverseJoinColumns = {@JoinColumn(name="contract_id", referencedColumnName="contract_id")}
}
@WhereJoinTable ( "ROLE = 'SIGNER' ")
private List<Contract> contracts;
使用する必要があります:
@WhereJoinTable(clause = "ROLE ='SIGNER'")