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(...)
TA贡献1811条经验 获得超6个赞
选项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);
}
TA贡献1815条经验 获得超13个赞
当前是不可能的,将来也不会。我认为即使有可能,对于更复杂的查询,您也不想人为地将所有查询复杂性压缩为方法名称。不仅因为难以理解查询中实际发生的事情,而且还因为从客户端代码的角度出发:您想要使用可表达的方法名称,在简单的情况下,findByUsername(…)
您可以使用它来创建查询。
对于更复杂的内容,您只需将查询复杂度提高到调用代码中,建议改为使用可读的方法名称,该名称以语义方式表达查询的作用,并使用@Query
,命名查询等将查询复杂度保留在手动声明的查询中。
添加回答
举报