【发布时间】:2015-03-12 19:14:32
【问题描述】:
我花了几个小时四处寻找,没有找到与我的情况类似的东西。
让我们假设以下多对多数据模型:
合同(任何商业实体) -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,但我可以每个角色拥有多个合同;
- 在 DB 端创建一个视图(这个确实有效:)
谢谢!
【问题讨论】:
标签: java hibernate jpa jointable