一尘不染

Hibernate:如何使用HQL设置NULL查询参数值?

hibernate

如何将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文档,查询将不会返回任何记录…)

我的问题:

  1. 为什么不Hibernate将空字符串正确地转换为“ is null”(而是错误地创建“ = null”)?

  2. 重写此查询以使其为null安全的最佳方法是什么?使用nullsafe的意思是,在“状态”字符串为null的情况下,它应该创建“为null”?


阅读 690

收藏
2020-06-20

共1个答案

一尘不染

  1. 我相信hibernate首先将您的HQL查询转换为SQL,然后才尝试绑定您的参数。这意味着它不能从重写查询param = ?param is null

  2. 尝试使用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();

2020-06-20