jpa Hibernate原生查询可选参数throws '运算符不存在:bigint = bytea'

bq9c1y66  于 2022-11-14  发布在  其他
关注(0)|答案(2)|浏览(173)

我有一个查询如下:

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

param参数是可选的,因此它可以是null
1.我创建了javax.persistance.Query
1.然后我对它setParameter("param", null)
1.当我调用getResultList()时,得到以下错误:
导致异常的原因:错误:操作员不存在:bigint =字节
我该怎么办?

tsm1rwdh

tsm1rwdh1#

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

:param IS NULL

如果id_or_smth是Table 1列,则查询应如下所示:

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 NULLIS NOT NULL,因为这样的查询:

SELECT id FROM table1 WHERE id_or_smth = NULL

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

7uzetpgm

7uzetpgm2#

也许您可以使用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();

相关问题