我花了几个小时四处搜寻,并没有发现任何类似于我的情况。
让我们假设遵循多对多数据模型:
Contract (any business entity) - contract_id - other fields Party (another business entity) - party_id - other fields Contract_Party (relations between first two with additional role indicator, e.g. owner, signer, seller, etc) - contract_id - party_id - role
现在让我们假设我要映射与派对相关的所有合同(单向)。可以使用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语句中。
到目前为止,在类似主题中发现了以下想法:
谢谢!
答案 0 :(得分:19)
您可以使用@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;
答案 1 :(得分:3)
您必须使用:
@WhereJoinTable(clause = "ROLE ='SIGNER'")