如何在JPARepository中生成与以下查询相对应的findBy方法?
select * from person where name=?1 and eff_dt < ?2 and (exp_dt >?2 OR exp_dt IS NULL)
答案 0 :(得分:1)
您可以从技术上做到这一点。但是最好避免这种情况。
假设您的实体类就像
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 :(得分:1)
从name =?1并且eff_dt <?2并且(exp_dt>?2 OR exp_dt为NULL的人)中选择* 假设实体类具有变量名
@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);