JPA @JoinTable具有额外的加入条件
我花了几个小时进行搜索,没有发现与我的案子相似的内容。
让我们假设以下多对多数据模型:
合同(任何业务实体)-contract_id
-其他领域
当事人(另一个业务实体)
-party_id
-其他领域
Contract_Party(前两个之间的关系
带有其他角色指示器,例如所有者,签名者,卖方等)
-contract_id
-party_id
-角色
现在,假设我要映射与合同方(单向)有关的 合同。可以使用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语句中添加 的方法。
到目前为止,在类似的主题中发现了以下想法:
- 将联接表映射为单独的实体,并使用自定义查询按角色执行过滤;
- Hibernate具有@JoinFormula批注,但是无法在@JoinTable中应用它;
- Hibernate也有@Where注释,但是它为Contract表而不是join表添加了条件;
- 使用@MapKeyColumn并返回Map而不是List,但是每个角色可以有多个合同;
- 在数据库端创建一个视图(这个确实可行:)
谢谢!
回答:
您可以使用@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;
以上是 JPA @JoinTable具有额外的加入条件 的全部内容, 来源链接: utcz.com/qa/433818.html