gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:24:20 25 4
gpt4 key购买 nike

如何将 hibernate 参数设置为“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);

就我而言,状态字符串可以为空。我已经对此进行了调试,然后 hibernate 然后生成一个像这样的 SQL 字符串/查询 ....status = null... 但是这在 MYSQL 中不起作用,因为正确的 SQL 语句必须是“status is null”(Mysql 不理解 status=null 并将其评估为 false,因此根据我已阅读的 mysql 文档,不会为查询返回任何记录...)

我的问题:

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

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

最佳答案

  1. 我相信 hibernate 首先将您的 HQL 查询转换为 SQL,然后才尝试绑定(bind)您的参数。这意味着它将无法将查询从 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();

关于java - Hibernate:如何使用 HQL 设置 NULL 查询参数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2123438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com