【问题标题】:Hibernate HQL Query Null ColumnsHibernate HQL 查询空列
【发布时间】:2011-05-18 00:37:22
【问题描述】:

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

这是一个示例 HQL 查询:

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

如果 name 或 price 为空,我不会得到该特定记录的任何条目。我认为当它为空时,Hibernate 只会为该列返回一个空值?

当列为空时如何提供替代值?

我已经用 Hibernate 控制台对此进行了测试。

【问题讨论】:

    标签: hibernate null hql


    【解决方案1】:

    有两点需要确认:

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

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

    【讨论】:

    • 我以 Pets 为例。但我的实际模型有不同的名称。我有超过 10 个属性,但我只是在这里将其简化为两个属性。当我运行该查询时,我确实得到了一个结果。但查询仅包含 NON-NULL 列。如果一个条目有一个 NULL,它会被 Hibernate 跳过。如果一个条目没有 NULL 条目,它会显示在结果中。
    • 没有例外。如果所有条目都包含一个空列,我会得到一个空列表。如果任何条目具有非 NULL 列,则正确返回该条目。
    • 生成的SQL呢?当你手动运行它时会发生什么?您能否提供有关您所看到内容的示例数据?
    【解决方案2】:

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

    我认为这里的休眠是为您提供包含所有 NULL 项的对象数组列表。如果你想看到,只需尝试打印结果列表和数组的大小即可知道它。

    另一种方法是修改您的代码,如下所示

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

    还为 Pets bean 添加一个构造函数来设置名称和价格。

    现在您可以在列表中看到 Pets bean 的名称和价格设置为空值。有关 HQL 中 bean 的部分初始化的更多信息,请参阅 here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      • 1970-01-01
      相关资源
      最近更新 更多