jpql 异常 ORA-00932: 数据类型不一致: 预期 BINARY 得到 DATE

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)