我正在尝试为我的应用程序设置一个查询,以便仅从具有特定列集的表中提取值。大多数情况下,此列将为null,但如果您在应用程序端编辑并保存项目而不在此字段中放置任何内容,则会将空白字符串保存到该数据库字段。
我尝试过TSQL查询:
SELECT * from TABLE where COLUMN is not NULL AND COLUMN != ''
此查询返回我需要的结果,但是当我在HQL中运行相同的查询时:
SELECT OBJECT from TABLE where COLUMN is not NULL and COLUMN <> ''
然后它仍然包含该列中包含空字符串的值。我已经尝试使用HQL和运算符&lt;&gt;和!=,并且还尝试使用Restrictions.ne("column","")
将其转换为条件对象,但似乎没有提供我需要的结果。
我在评论中尝试了长度,但没有运气。使用查询中的长度,hibernate会生成完整的查询。 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
答案 0 :(得分:1)
新秀错误。我的动作类中还有另一个地方,我使用不同的查询在应用程序中构建选择列表。这导致列表被所有值覆盖而不是使用空白的值。剪下这个重复后,我可以使用运算符column <> ''
,我得到了正确的结果