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

时间:2014-08-18 09:41:51

标签: java sql hibernate jpa orm

我的查询如下:

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

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

  1. 我创建了一个javax.persistance.Query
  2. 然后我setParameter("param", null)
  3. 当我致电getResultList()时,我收到以下错误:
  4.   

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

    我该如何处理?

2 个答案:

答案 0 :(得分:1)

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

:param IS NULL

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

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();

paramValue不能为空。

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

SELECT id FROM table1 WHERE id_or_smth = NULL

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

答案 1 :(得分:0)

也许您可以使用criteria queries代替:

Criteria crit = sess.createCriteria(Table1.class);
crit.setProjection(Restrictions.id());
if (param != null) crit.add(Restrictions.eq("id_or_smth", param));

List result = crit.list();