我花了几个小时进行搜索,没有发现与我的案子相似的内容。
让我们假设以下多对多数据模型:
合同(任何业务实体) -contract_id -其他领域 当事人(另一个业务实体) -party_id -其他领域 Contract_Party(前两个之间的关系 带有其他角色指示器,例如所有者,签名者,卖方等) -contract_id -party_id -角色
现在,假设我要映射与合同方(单向)有关的 所有 合同。可以使用Party实体类中的以下注释来完成:
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;