休眠:如何使用HQL设置NULL查询参数值?
如何将休眠参数设置为“ null”?例:
Query query = getSession().createQuery("from CountryDTO c where c.status = :status and c.type =:type").setParameter("status", status, Hibernate.STRING)
.setParameter("type", type, Hibernate.STRING);
就我而言,状态字符串可以为null。我已对此进行调试,然后休眠,然后生成这样的SQL字符串/查询..... status =
null但这在MYSQL中不起作用,因为正确的SQL语句必须为“ status is null
”(Mysql无法理解status =
null并对此求值为false,因此根据我已阅读的mysql文档,查询将不会返回任何记录…)
我的问题:
为什么不
Hibernate
将空字符串正确地转换为“ is null”(而是错误地创建“ = null”)?重写此查询以使其为null安全的最佳方法是什么?使用nullsafe的意思是,在“状态”字符串为null的情况下,它应该创建“为null”?
回答:
我相信休眠首先将您的HQL查询转换为SQL,然后才尝试绑定您的参数。这意味着它不能从重写查询
param = ?
到param is null
。尝试使用Criteria API:
Criteria c = session.createCriteria(CountryDTO.class); c.add(Restrictions.eq("type", type));
c.add(status == null ? Restrictions.isNull("status") : Restrictions.eq("status", status));
List result = c.list();
以上是 休眠:如何使用HQL设置NULL查询参数值? 的全部内容, 来源链接: utcz.com/qa/403642.html