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

我的问题:

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

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

回答:

  1. 我相信休眠首先将您的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();

以上是 休眠:如何使用HQL设置NULL查询参数值? 的全部内容, 来源链接: utcz.com/qa/403642.html

回到顶部