为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蓝山帝景 2019-12-06 11:06:08
我正在尝试迁移该应用程序。我正在从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?
查看完整描述

3 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

同意奥利弗关于长且不可读的方法名,但是尽管如此,并且为了论证,您可以通过使用等效性来获得所需的结果


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

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

因此,在您的情况下,它应如下所示:


findByPlan_PlanTypeInAndSetupStepIsNullOrPlan_PlanTypeInAndStepupStepIs(...)


查看完整回答
反对 回复 2019-12-06
?
杨魅力

TA贡献1811条经验 获得超5个赞

选项1:您可以使用命名查询(请参阅使用JPA命名查询):


@Entity

@NamedQuery(name = "User.findByEmailAddress",

  query = "select u from User u where u.emailAddress = ?1")

public class User {


}


public interface UserRepository extends JpaRepository<User, Long> {


   User findByEmailAddress(String emailAddress);

}

Option2:用于@Query编写您的自定义查询(请参阅使用@Query)


public interface UserRepository extends JpaRepository<User, Long> {


   @Query("select u from User u where u.emailAddress = ?1")

   User findByEmailAddress(String emailAddress);

}


查看完整回答
反对 回复 2019-12-06
?
萧十郎

TA贡献1815条经验 获得超12个赞

当前是不可能的,将来也不会。我认为即使有可能,对于更复杂的查询,您也不想人为地将所有查询复杂性压缩为方法名称。不仅因为难以理解查询中实际发生的事情,而且还因为从客户端代码的角度出发:您想要使用可表达的方法名称,在简单的情况下,findByUsername(…)您可以使用它来创建查询。

对于更复杂的内容,您只需将查询复杂度提高到调用代码中,建议改为使用可读的方法名称,该名称以语义方式表达查询的作用,并使用@Query,命名查询等将查询复杂度保留在手动声明的查询中。


查看完整回答
反对 回复 2019-12-06
  • 3 回答
  • 0 关注
  • 3341 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信