[英]How to create method name using After and Equals in Spring Data JPA?
[英]Spring data jpa - How to combine multiple And and Or through method name
我正在尝试迁移应用程序。 我正在从Hibernate 到 Spring 数据 Jpa 工作。
虽然 spring 数据 jpa 提供了简单的查询构建方法,但我坚持创建同时使用And
和Or operator
的查询方法。
MethodName - findByPlan_PlanTypeInAndSetupStepIsNullOrStepupStepIs(...)
当它转换为查询时,前两个表达式被组合并执行为[(exp1 and exp2) or (exp3)]
。
而需要的是](exp1) and (exp2 or exp3)]
。
谁能告诉我这是否可以通过Spring data jpa?
同意奥利弗关于长且不可读的方法名,但是尽管如此,并且为了论证,您可以通过使用等效性来获得所需的结果
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",
query = "select u from User u where u.emailAddress = ?1")
public class User {
}
public interface UserRepository extends JpaRepository<User, Long> {
User findByEmailAddress(String emailAddress);
}
选项2 :使用@Query
编写您的自定义查询(请参阅使用@Query )
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u from User u where u.emailAddress = ?1")
User findByEmailAddress(String emailAddress);
}
当前是不可能的,将来也不会。 我认为即使有可能,对于更复杂的查询,您也不想人为地将所有查询复杂性压缩为方法名称。 不仅因为难以理解查询中实际发生的事情,而且还因为从客户端代码的角度出发:您想要使用可表达的方法名,如果使用简单的findByUsername(…)
,则可以使用查询派生创造。
对于更复杂的内容,您只是将查询复杂度提高到调用代码中,建议改为使用可读的方法名称,该名称以语义方式表达查询的作用,并使用@Query
,命名查询或类似。
使用类似
findByFirstElementAndCriteriaOrSecondElementAndCriteria
就像(第一&条件)或(第二&条件)->条件&(第一或第二)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.