Spring 如何使用AND和OR条件生成Crudepository findBy方法签名?
如何在JPARepository中生成与下面查询对应的findBy方法Spring 如何使用AND和OR条件生成Crudepository findBy方法签名?,spring,hibernate,spring-data-jpa,jpql,Spring,Hibernate,Spring Data Jpa,Jpql,如何在JPARepository中生成与下面查询对应的findBy方法 select * from person where name=?1 and eff_dt < ?2 and (exp_dt >?2 OR exp_dt IS NULL) 从姓名=1且有效时间2或有效时间为空)的人员中选择* 从技术上讲,你可以做到这一点。但最好避免 假设您的实体类是 class Person { String name; Integer effDt; Integer expDt;
select * from person where name=?1 and eff_dt < ?2 and (exp_dt >?2 OR exp_dt IS NULL)
从姓名=1且有效时间<2且(有效时间>2或有效时间为空)的人员中选择*
从技术上讲,你可以做到这一点。但最好避免
假设您的实体类是
class Person {
String name;
Integer effDt;
Integer expDt;
// getters and setters
}
您的方法名称将是
findByNameIsAndEffDtLessThanAndExpDtGreaterThanOrNameIsAndEffDtLessThanAndExpDtIsNull(String name, Integer effDt, Integer expDt, String name2, Integer effDt2);
//name and name2 will be same & effDt and effDt2 will be same.
//Boolean Algebra: A(B+C) = A.B + A.C
正如你所看到的,这是不必要的复杂和难以理解的。改用本机查询。从技术上讲,您可以这样做。但最好避免 假设您的实体类是
class Person {
String name;
Integer effDt;
Integer expDt;
// getters and setters
}
您的方法名称将是
findByNameIsAndEffDtLessThanAndExpDtGreaterThanOrNameIsAndEffDtLessThanAndExpDtIsNull(String name, Integer effDt, Integer expDt, String name2, Integer effDt2);
//name and name2 will be same & effDt and effDt2 will be same.
//Boolean Algebra: A(B+C) = A.B + A.C
正如你所看到的,这是不必要的复杂和难以理解的。改为使用本机查询。从姓名=?1、有效日期<?2和(有效日期>2或有效日期为空)的人员中选择* 通过变量的名称假设实体类
@Entity
public class Person{
@Id
@GeneratedValue
private long id;
private String name;
private Date eff_dt;
private Date exp_dt;
}
查询可以是
public final static String FIND_ALL_PERSONS="select s from Person p where p.name=:name and p.eff_dt < :eff_dt and (exp_dt > : exp_dt OR exp_dt is null)";
@Query(FIND_ALL_PERSONS)
List<Person> findAllPersons(@Param("name")String name,@Param("eff_dt") eff_dt,@Param("exp_dt") Date axp_dt);
public final static String FIND_ALL_PERSONS=“从Person p中选择s,其中p.name=:name和p.eff_dt<:eff_dt和(exp_dt>:exp_dt或exp_dt为null)”;
@查询(查找所有人)
列出findAllPersons(@Param(“name”)字符串名称、@Param(“eff_dt”)eff_dt、@Param(“exp_dt”)日期axp_dt);
从姓名=1且有效时间<2且(有效时间>2或有效时间为空)的人员中选择*
通过变量的名称假设实体类
@Entity
public class Person{
@Id
@GeneratedValue
private long id;
private String name;
private Date eff_dt;
private Date exp_dt;
}
查询可以是
public final static String FIND_ALL_PERSONS="select s from Person p where p.name=:name and p.eff_dt < :eff_dt and (exp_dt > : exp_dt OR exp_dt is null)";
@Query(FIND_ALL_PERSONS)
List<Person> findAllPersons(@Param("name")String name,@Param("eff_dt") eff_dt,@Param("exp_dt") Date axp_dt);
public final static String FIND_ALL_PERSONS=“从Person p中选择s,其中p.name=:name和p.eff_dt<:eff_dt和(exp_dt>:exp_dt或exp_dt为null)”;
@查询(查找所有人)
列出findAllPersons(@Param(“name”)字符串名称、@Param(“eff_dt”)eff_dt、@Param(“exp_dt”)日期axp_dt);
您的上述查询是否正确?重新检查。并显示您的实体类您创建了一个方法,选择您能想到的最好的方法名,然后用@Query(“”
注释它。从方法名派生的查询对于findByName()这样的简单内容来说很好。它们不适用于像您这样更复杂的查询。您上面的查询是否正确?重新检查。并显示您的实体类您创建了一个方法,选择您能想到的最好的方法名,然后用@Query(“”
注释它。从方法名派生的查询对于findByName()这样的简单内容来说很好。它们不适用于像您这样的更复杂的查询