当前位置: 首页 > 面试题库 >

JPA @JoinTable具有额外的加入条件

东郭存
2023-03-14
问题内容

我花了几个小时进行搜索,没有发现与我的案子相似的内容。

让我们假设以下多对多数据模型:

合同(任何业务实体)
-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 条件查询,以便仅当实体存在于联接表中时才选择实体列表?例如,采用以下三个表: 有问题的查询(我希望 JPA 生成什么)是: 以下条件查询将产生类似的结果,但有两个连接: 根本问题似乎是我对USER_WORKGROUP连接表使用@JoinTable注释,而不是对连接表使用单独的@Entity,所以我似乎不能在条件查询中将USER_WORGGroup用作根。 以下是实体类:

  • 我需要支持一个涉及以下实体的场景(使用JPA): 用户 一个用户可以有多个帐户,一个帐户可以在多个用户之间共享,这是迄今为止的标准@ManyToMany关系。 一个用户可以为每个帐户拥有一组不同的角色,一个角色可以在多个用户之间共享。 我遵循了这个实践,它解释了一种用额外列映射多对多关联的方法,但我不确定我是否得到了它。 用户实体: 账户实体: 用户帐户实体: 用户帐号: 我正在创建一个新用户并尝

  • 在我的Spring/MySql系统中,我有一些Jpa实体,它们通过父关系上的joinTable在OneToMany关系中连接。在这种情况下,一个帖子有很多评论。 如果我尝试删除Post实体,问题是生成的SQL试图删除仍在连接表中的注释,从而触发外键冲突。 什么是正确的方法: 删除连接表项 删除连接表左侧父关系实体 删除连接表右侧子关系实体 要记住的一些事情: 还有其他实体通过oneTo多项关系拥有

  • 我需要一个灵活的过滤器来过滤所有代码中的多个EventListener。我可以使用@EventListener(condition=“event.enabled”),但我的过滤器需要分析fooEvent的许多属性。 我希望我可以使用应用程序上下文中的谓词Bean: 但我得到: 是否可以为EventListerns使用外部复杂条件?或者至少定义具有复杂条件的全局侦听器,并在不重复完整条件的情况下继承

  • 如贴图所示,我正在尝试使用MPAndroid libraray的水平条形图,一切都很好,除了在图的末尾有一条十字线,如图所示。我还附上了图表样式的代码。请有人帮忙纠正我代码中的错误。 MpChart错误的图像:

  • 问题内容: 我希望能够基于表达式的结果内部联接两个表。 到目前为止,我一直在尝试: RegT是我在此联接之前进行的联接: 该SQL脚本不起作用。 因此,总的来说,如果a为1,则它应在表上联接,否则应在上联接。 解决方案: 在我的选择语句中,我执行了以下联接: 然后,根据进行编辑,以输出正确的内容,如下所示: 问题答案: 尝试使用LEFT JOIN的将两个表放入查询中 现在,在您的select子句中