Nar*_*esh 5 hibernate jpa hql jpql spring-data-jpa
我写了下面的 JPQL。
select e.name from emp e where e.date = nvl(:date,select max(date) from emp e where e.id=1);
Run Code Online (Sandbox Code Playgroud)
当我传递日期值时,它应该使用给定的日期值运行 JPQL。如果我不传递任何日期值,那么 JPQL 应该以max(date).
但得到了例外inconsistent datatypes。
观察结果:
如果我将查询更改为:
select e.name from emp e where e.date = :date
Run Code Online (Sandbox Code Playgroud)
它运行良好。但当我使用时,nvl我遇到了异常。
小智 0
使用 NamedQuery 可以对您有所帮助,它可以很好地处理上述类型的 WHERE 条件。
例如:
实体
人.java
@NamedQuery(name="get_all_persons",
query="select p from Person p"
+ " where p.birthDate = nvl(:date, (select max(birthDate) from Person))")
Run Code Online (Sandbox Code Playgroud)
存储库:
PersonJpaRepository.java
public List<Person> findAll() {
TypedQuery<Person> namedQuery = entityManager.createNamedQuery("get_all_persons", Person.class);
//namedQuery.setParameter("date", "2022-05-18");
namedQuery.setParameter("date", null);
return namedQuery.getResultList();
}
Run Code Online (Sandbox Code Playgroud)