【问题标题】:HQL does not ignore values with blank string in columnHQL 不会忽略列中带有空白字符串的值
【发布时间】:2014-08-19 21:50:21
【问题描述】:

我正在尝试为我的应用程序设置一个查询,以仅从具有特定列集的表中提取值。大多数情况下,此列将为空,但如果您在应用程序端编辑并保存项目而不在此字段中放置任何内容,则它将一个空白字符串保存到该数据库字段。

我已经尝试过 TSQL 查询:

SELECT * from TABLE where COLUMN is not NULL AND COLUMN != ''

此查询返回我需要的结果,但是当我在 HQL 中运行相同的查询时:

SELECT OBJECT from TABLE where COLUMN is not NULL and COLUMN <> ''

然后它仍然包含该列中具有空白字符串的值。我已经尝试使用带有运算符 和 != 的 HQL,并且还尝试使用 Restrictions.ne("column","") 将其转换为标准对象,但似乎没有提供我需要的结果。

我在 cmets 中尝试了 Length,但没有运气。使用查询中的长度,休眠会生成完整的查询。 time_clock_id 列是我遇到的问题。 Hibernate 设置为 SQLServerDialect

select timezone0_.time_zone_id as time1_368_, timezone0_.version as version368_, timezone0_.modification_timestamp as modifica3_368_, timezone0_.time_offset as time4_368_, timezone0_.modification_user as modifica5_368_, timezone0_.name as name368_, timezone0_.description as descript7_368_, timezone0_.active as active368_, timezone0_.time_clock_id as time9_368_ from time_zone timezone0_ where timezone0_.active=1 and (timezone0_.time_clock_id is not null) and len(timezone0_.time_clock_id)>0

【问题讨论】:

  • 尝试使用LENGTH(COLUMN) &gt; 0
  • 什么是休眠生成?您是否为您的数据库设置了方言?
  • 刚刚尝试了 Length 并没有任何运气。 hibernate中设置的方言是SQLServerDialect
  • 我更新了描述以打印出 Hibernate 生成的完整查询。我尝试在 MSSQL 中运行此查询,它确实产生了我正在寻找的结果,但应用程序中的结果仍然不同。

标签: java hql


【解决方案1】:

新手错误。在我的操作类中的另一个地方,我使用不同的查询在应用程序中构建选择列表。这导致列表被所有值覆盖,而不是那些使用空白的值。剪掉这个重复后,我可以使用运算符column &lt;&gt; '',我得到了正确的结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 2016-09-18
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多