Hibernate HQL查询空列

3

我有一个简单的HQL SELECT查询。当列不为null时,我能够检索记录。但是如果其中一列为null,我就无法获取该具有null列的记录。

下面是示例HQL查询:

SELECT p.name as name, p.price as price
FROM  Pets p

如果名称或价格为空,我将不会获取该特定记录的任何条目。我以为当它为空时,Hibernate 只会返回一个 null 值给该列呢?
当该列为空时,如何提供替代值?
我已经在 Hibernate 控制台上进行了测试。
2个回答

0

确认两件事:

  1. 您的模型名称是 Pets,对吗?还是 Pet
  2. 您真的只想要这两个属性吗?通常的方式是检索整个对象,例如 from Pet

但即使如此,(前提是模型名为Pets),应该也能正常工作。您是否遇到了任何异常,或者只是得到一个空列表?Hibernate 生成的 SQL 是什么(您可以通过将属性 hibernate.show_sql 设置为 true 来查看)?如果在数据库中手动运行这个 SQL,是否会得到任何记录?


我只是举了Pets的例子。但我的实际模型有不同的名称。我有超过10个属性,但在这里我只简化为两个属性。当我运行该查询时,我确实会得到结果。但是查询仅包含非空列。如果一个条目有一个NULL,它将被Hibernate跳过。如果一个条目没有NULL条目,则会显示在结果中。 - chris
如果所有条目都包含空列,则返回一个空列表。如果任何条目具有非空列,则该条目将被正确返回。 - chris
生成的 SQL 语句怎么样?手动运行时会发生什么?您能否提供一个示例数据以说明您所看到的情况? - jpkroehling

0

可能有点晚回复了,但希望能对其他人有所帮助!

我认为这里的Hibernate会给你一个包含所有NULL项的对象数组列表。如果你想查看它,只需尝试打印结果列表和数组的大小即可。

另一种方法是修改你的代码如下:

SELECT new Pets(p.name, p.price)
FROM  Pets p

同时添加一个Pets bean的构造函数,以设置名称和价格。

现在您可以在列表中看到Pets beans,其中名称和价格的值为null。有关在HQL中部分初始化bean的更多信息,请参见此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接