如何将hibernate参数设置为“空”?例:
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。我已经调试了它,然后hibernate,然后生成了这样的SQL字符串/查询..... status =null但这在MYSQL中不起作用,因为正确的SQL语句必须为“ status is null”(Mysql无法理解status=null并对此进行评估为false,因此根据我已阅读的mysql文档,查询将不会返回任何记录…)
status =null
status is null
我的问题:
为什么不Hibernate将空字符串正确地转换为“ is null”(而是错误地创建“ = null”)?
Hibernate
重写此查询以使其为null安全的最佳方法是什么?使用nullsafe的意思是,在“状态”字符串为null的情况下,它应该创建“为null”?
我相信hibernate首先将您的HQL查询转换为SQL,然后才尝试绑定您的参数。这意味着它不能从重写查询param = ?到param is null。
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();