Spring data jpa - 如何组合多个 And 和 or 通过方法名称

2022-08-31 20:11:58

我正在尝试迁移应用程序。我正在研究从Hibernate到Spring Data Jpa

虽然 spring data jpa 提供了简单的查询构建方法,但我在创建同时使用 和 的查询方法时遇到了困难。AndOr operator

方法名称 -findByPlan_PlanTypeInAndSetupStepIsNullOrStepupStepIs(...)

当它转换为查询时,前两个表达式被组合在一起,并作为 执行。[(exp1 and exp2) or (exp3)]

而必需的是 。](exp1) and (exp2 or exp3)]

任何人都可以让我知道这是否可以通过Spring data jpa?


答案 1

同意 Oliver 关于长而难以读的方法名称,但尽管如此,为了论证起见,您可以通过使用等效性来获得所需的结果

A /\ (B \/ C) <=> (A /\ B) \/ (A /\ C)
A and (B or C) <=> (A and B) or (A and C)

因此,在您的情况下,它应该看起来像这样:

findByPlan_PlanTypeInAndSetupStepIsNullOrPlan_PlanTypeInAndStepupStepIs(...)

答案 2

目前这是不可能的,将来也不会。我认为,即使有可能,使用更复杂的查询,您也不会希望人为地将所有查询复杂性压缩到方法名称中。这不仅是因为很难消化查询中实际发生的情况,而且从客户端代码的角度来看:您希望使用富有表现力的方法名称,如果简单,查询派生允许您创建。findByUsername(…)

对于更复杂的东西,你只需将查询复杂性提升到调用代码中,建议移动到一个可读的方法名称,该名称在语义上表达了查询的作用,并使用 命名查询或类似方式在手动声明的查询中保持查询复杂性。@Query


推荐