Hibernate本机查询可选参数throws'运算符不存在:bigint = bytea'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate本机查询可选参数throws'运算符不存在:bigint = bytea'相关的知识,希望对你有一定的参考价值。

我有一个查询如下:

SELECT id FROM table1 WHERE (:param IS NULL OR id_or_smth = :param)

param参数是可选的,因此它可以是null

  1. 我创造了一个qazxsw poi
  2. 我然后javax.persistance.Query
  3. 当我打电话给setParameter("param", null)时,我收到以下错误:

引起:org.hibernate.exception.SQLGrammarException:错误:运算符不存在:bigint = bytea

我怎么处理这个?

答案

只有在指定实际的Entity属性/ Table列时,HQL和Criteria才能工作,因此这不起作用:

getResultList()

如果id_or_smth是Table1列,那么这就是您的查询的样子:

:param IS NULL

并且paramValue不能为null。

在SQL中,您必须始终使用IS NULL / IS NOT NULL,因为这样的查询:

Query q = entityManager.createNativeQuery("SELECT id FROM table1 WHERE id_or_smth IS NULL or id_or_smth = :param");
q.setParameter("param", paramValye);
q.getResultList();

即使存在满足id_or_smth IS NULL的行,也将始终返回空结果

另一答案

也许你可以使用SELECT id FROM table1 WHERE id_or_smth = NULL 代替:

criteria queries

以上是关于Hibernate本机查询可选参数throws'运算符不存在:bigint = bytea'的主要内容,如果未能解决你的问题,请参考以下文章

具有动态查询的 JPA 也是 Hibernate 中的动态(可选)参数

JPA/Hibernate 本机查询无法识别参数

在 Hibernate 中使用 @Query 进行带参数的本机查询

在 Spring Boot 中向本机查询添加参数会导致“org.hibernate.exception.SQLGrammarException”,

Hibernate + Java 性能较慢,但当我将 TOAD 与相同的本机 Oracle 查询一起使用时性能较快

Hibernate:本机 SQL 查询重复列结果