【问题标题】:Check null parameter in NamedQuery检查 NamedQuery 中的空参数
【发布时间】:2016-04-02 14:14:37
【问题描述】:

当列是数字类型时,我通常在命名查询中使用此参数验证:

(-1 = ?1 OR column = ?1)

但使用 between 的日期过滤器无法进行相同类型的验证:

(p.date between ?1 and ?2)

我找到的解决方案是添加一个新参数检查日期是否为空:

(dateInitial == null || dateFinal == null)

在命名查询中:

(?3 = true OR p.date between ?1 and ?2)
  • 是否有不需要添加其他参数的解决方案?使用现有参数。

【问题讨论】:

  • 您能在调用命名查询之前检查日期吗?
  • 是的,我做到了:(dateInitial == null || dateFinal == null)。你说的是在 null 的情况下发送另一个值吗?
  • 真的不是您问题的答案,我只是说检查代码中的日期,如果为 null,则不要调用命名查询。数据库中有空日期吗?
  • 我明白,但就我而言,我还有其他参数要检查,不,我没有。

标签: hibernate hql named-query


【解决方案1】:

代替

(p.date between ?1 and ?2)

你可以试试

(p.date < ?1 or ?1 is null) and (p.date > ?2 or ?2 is null)

【讨论】:

  • 谢谢,我试过 ?1 也为空,但 jdbc 驱动程序给了我一个异常 ORA-00932(不一致的数据类型)。算子的顺序是&gt; ?1&lt; ?2吧?
  • 你可以尝试 ?1 ?2 ?3 ?4 为 ?1 和 ?2 传递相同的值
猜你喜欢
  • 1970-01-01
  • 2021-02-14
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 2020-08-28
  • 2014-05-24
  • 1970-01-01
相关资源
最近更新 更多