【问题标题】:Query Spring DATA with specific condition查询具有特定条件的 Spring DATA
【发布时间】:2020-06-14 19:28:54
【问题描述】:

我正在尝试获取具有状态为 'CA' 或 'CCR' 的合同列表的帐户,我尝试了以下查询并且它有效.

问题是我想在我的查询中添加一个条件,以获取具有不同类型的相反合同的帐户。

两个相反的合同是两个不同类型的合同。 (一份合同H,另一份合同A)

支持的类型有:家庭保险和汽车保险(H 和 A)。

@Query("select a from Account a full join a.contracts c join c.refStatusContract r where a.id=:id AND r.cdStatutContrat in ('CA','CCR')")
    Account getAccountHavingContractStatusActifOrInProcessOfTermination(@Param("id") long id);

我的需要:

我想检查我的数据库中是否存在两个附加到帐户的合同,其中两个合同是对立的,并且合同授权状态是“CA”或“CCR”。

【问题讨论】:

  • 您能否通过一些例子详细说明反对合同的内容。
  • 您好,感谢您的评论。我将编辑文本
  • 我认为您可以使用 JPA Criteria API 或 Spring Data JPA Specification 按条件构建查询,这是类型安全且更灵活(可能看起来有点复杂)。

标签: java spring java-8 spring-data-jpa spring-data


【解决方案1】:

不确定我是否正确理解了您的问题

因此,您需要以下帐户:

  1. 拥有状态为“CA”或“CCR”的合同
  2. 至少有 2 份合同,一份为 H 型,另一份为 A 型

这是你需要的吗?

@Query("select a 
        from Account a 
        full join a.contracts c 
        join c.refStatusContract r 
        where a.id=:id 
            AND r.cdStatutContrat in ('CA','CCR') 
            AND c.contractType in ('H', 'A')
        GROUP BY a
        having count(distinct c.contractType) > 1")
Account getAccountHavingContractStatusActifOrInProcessOfTermination(@Param("id") long id);

这是你需要的吗?

【讨论】:

    猜你喜欢
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    相关资源
    最近更新 更多