具有额外连接条件的 JPA @JoinTable

JPA @JoinTable with extra join conditions

我花了几个小时四处搜索,但没有发现任何与我的情况相似的东西。

让我们假设遵循多对多数据模型:

合同(任何商业实体)
- contract_id
- 其他领域

当事人(另一个商业实体)
- party_id
- 其他领域

Contract_Party(前两者之间的关系
带有额外的角色指示符,例如所有者、签名者、卖方等)
- contract_id
- party_id
- 角色

现在假设我要映射 所有 方相关合同(单向)。可以在 Party 实体 class:

中使用以下注释来完成
@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 注解。适用于协会table

@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'")