Spring Data JPA-如何通过方法名称组合多个And和Or

我正在尝试迁移该应用程序。我正在从Hibernate到Spring Data Jpa工作

尽管spring data jpa提供了用于构建查询的简单方法,但我仍然坚持创建同时使用And和的查询方法Or operator

方法名称- findByPlan_PlanTypeInAndSetupStepIsNullOrStepupStepIs(...)

当它转换为查询时,前两个表达式将合并并以形式执行[(exp1 and exp2) or (exp3)]

而要求是](exp1) and (exp2 or exp3)]

任何人都可以让我知道是否可以通过以下方式实现 Spring data jpa?


蓝山帝景
浏览 3356回答 3
3回答

翻过高山走不出你

同意奥利弗关于长且不可读的方法名,但是尽管如此,并且为了论证,您可以通过使用等效性来获得所需的结果A /\ (B \/ C) <=> (A /\ B) \/ (A /\ C)A and (B or C) <=> (A and B) or (A and C)因此,在您的情况下,它应如下所示:findByPlan_PlanTypeInAndSetupStepIsNullOrPlan_PlanTypeInAndStepupStepIs(...)

杨魅力

选项1:您可以使用命名查询(请参阅使用JPA命名查询):@Entity@NamedQuery(name = "User.findByEmailAddress",&nbsp; query = "select u from User u where u.emailAddress = ?1")public class User {}public interface UserRepository extends JpaRepository<User, Long> {&nbsp; &nbsp;User findByEmailAddress(String emailAddress);}Option2:用于@Query编写您的自定义查询(请参阅使用@Query)public interface UserRepository extends JpaRepository<User, Long> {&nbsp; &nbsp;@Query("select u from User u where u.emailAddress = ?1")&nbsp; &nbsp;User findByEmailAddress(String emailAddress);}

萧十郎

当前是不可能的,将来也不会。我认为即使有可能,对于更复杂的查询,您也不想人为地将所有查询复杂性压缩为方法名称。不仅因为难以理解查询中实际发生的事情,而且还因为从客户端代码的角度出发:您想要使用可表达的方法名称,在简单的情况下,findByUsername(…)您可以使用它来创建查询。对于更复杂的内容,您只需将查询复杂度提高到调用代码中,建议改为使用可读的方法名称,该名称以语义方式表达查询的作用,并使用@Query,命名查询等将查询复杂度保留在手动声明的查询中。
打开App,查看更多内容
随时随地看视频慕课网APP