当前位置: 首页 > 面试题库 >

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

於彬
2023-03-14
问题内容

如何将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”?


问题答案:
  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();



 类似资料:
  • 问题内容: 如何将休眠参数设置为“ null”?例: 就我而言,状态字符串可以为null。我已对此进行调试,然后休眠,然后生成这样的SQL字符串/查询..... 但这在MYSQL中不起作用,因为正确的SQL语句必须为“ ”(Mysql无法理解status = null并对此求值为false,因此根据我已阅读的mysql文档,查询将不会返回任何记录…) 我的问题: 为什么不将空字符串正确地转换为“

  • 问题内容: 给出以下HQL查询: 我使用Query对象的方法进行设置。 我想使用对象进行设置,但是在查看Hibernate文档和方法列表时,我看不出要使用哪种明显的选择。有任何想法吗? 问题答案: 使用,的Javadoc在这里。 有四种变体可供选择。

  • 问题内容: 我有一个实体: 我在说。这是我的DAO方法: 日志说: 请求处理失败;嵌套的异常是java.lang.NullPointerException 并将指针放在这一行: 有时必须为null。那么如何设置null? 问题答案: 如果您查看Query类的文档,setInteger()方法, 它以名称和 原始类型int 作为参数。 当您在 自动装箱 期间传递值为null的包装器类型Integer

  • 问题内容: 这是我的代码部分: 有时可以为null(Date类对象)。如果为null,则会引发以下异常: 如何使此代码正常工作并将null值持久保存到数据库中? 问题答案: 您正在使用postgresql(已经在堆栈中进行了说明),并且可能正在使用Hibernate,几乎可以肯定会遇到此问题:PostgreSQL JDBCNull String作为bytea 因此,这意味着转义到Hibernate

  • 问题内容: 在我的HQL查询下方找到 该查询工作正常,但是在此情况下,我想传递userId的值,但无法弄清楚该怎么做。请帮助..!提前致谢..!! 问题答案: 我很简单地将参数添加到HQL __ 在这里,我有硬编码15您可以简单地使用变量代替它

  • 问题内容: 嗨,我有一个命名查询 我想这样设置限制: 但这在服务器启动时显示错误。我正在使用以下代码在DAO类中调用查询: 需要设置开始和结束参数。请帮忙。 问题答案: 正如@DataNucleus所说,LIMIT在JPQL中不是有效的关键字。这不是指定要返回多少行的方法。这是您的操作方式: 这将是调用命名查询的代码: