具有额外连接条件的 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 语句中的方法。
到目前为止在类似主题中发现了以下想法:
- map 加入 table 作为单独的实体,并使用自定义查询按角色执行过滤;
- Hibernate 有@JoinFormula 注释,但无法在@JoinTable 中应用它;
- Hibernate 也有 @Where 注解,但它为 Contract table 添加条件而不是为 join table;
- 使用@MapKeyColumn 和return Map 而不是List,但我可以为每个角色分配多个合同;
- 在数据库端创建一个视图(这个确实有效:)
谢谢!
您可以使用@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'")
我花了几个小时四处搜索,但没有发现任何与我的情况相似的东西。
让我们假设遵循多对多数据模型:
合同(任何商业实体) - 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 语句中的方法。
到目前为止在类似主题中发现了以下想法:
- map 加入 table 作为单独的实体,并使用自定义查询按角色执行过滤;
- Hibernate 有@JoinFormula 注释,但无法在@JoinTable 中应用它;
- Hibernate 也有 @Where 注解,但它为 Contract table 添加条件而不是为 join table;
- 使用@MapKeyColumn 和return Map 而不是List,但我可以为每个角色分配多个合同;
- 在数据库端创建一个视图(这个确实有效:)
谢谢!
您可以使用@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'")