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

回到顶部