我的查询如下:
SELECT id FROM table1 WHERE (:param IS NULL OR id_or_smth = :param)
param
参数是可选的,因此它可以是null
javax.persistance.Query
setParameter("param", null)
getResultList()
时,我收到以下错误:引起:org.hibernate.exception.SQLGrammarException:错误: 运算符不存在:bigint = bytea
我该如何处理?
答案 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();