2010-11-30 86 views
2

我有一个简单的HQL SELECT查询。当列不为空时,我可以检索记录。但是,如果其中一列是空的,我不会得到那个空列的记录。Hibernate HQL查询空列

下面是一个示例HQL查询:

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

如果名称或价格为null,我没有得到该特定记录的任何条目。我认为Hibernate会在它为空时为该列返回一个空值?

如何在列为空时提供备用值?

我已经用Hibernate Console测试过了。

回答

0

两件事确认:

  1. 您的模型被命名为Pets,对不对?或者它是Pet
  2. 你真的只想要这两个属性吗?通常的方法是检索完整的对象,如from Pet

但即使这样也可以正常工作(假设模型名为Pets)。你有没有例外,或者你只是得到一个空的列表?什么是休眠正在产生的SQL(你可以通过设置属性hibernate.show_sql为true来看到)。如果你在数据库中手动运行这个SQL,你会得到任何记录吗?

+0

我用过宠物只是为了举例。但我的实际模型有不同的名称。我有超过10个属性,但我只是简化它在这里两个属性。当我运行该查询时,我得到了一个结果。但查询只包含NON-NULL列。如果一个条目有一个NULL,它将被Hibernate跳过。如果条目没有NULL条目,则会显示在结果中。 – chris 2010-11-30 18:14:57

0

这可能是一个迟到的回复。但希望它能帮助别人!

我想这里的hibernate给你的所有NULL项的对象数组列表。如果你想看到只是试图打印结果列表和数组的大小来了解它。

还有一个方法是修改如下面

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

还要添加一个构造宠物bean来设置名称和价格代码。

现在,您可以在名单和价格中设置空值的列表中看到Pets beans。请参阅here了解更多关于HQL中bean的部分初始化。