我可以在HQL查询中选择null作为列值吗?

时间:2010-07-30 22:15:07

标签: java hibernate hql orm

我需要一个包含三列的列表。第1列和第3列具有值,而第2列为null。 我可以通过HQL查询来完成吗?

我需要这样的东西:

select id, null, name from MyClass

MyClass以及基础表只有两个属性/列,即“id”和“name”

4 个答案:

答案 0 :(得分:14)

另一个似乎有用的选项(在DB2,MySQL,Oracle和SQL Server上测试):

select id, cast(null as char), name from ...

您可以继承Hibernate方言并使用自定义函数对其进行抽象:

registerFunction("always_null", 
  new SQLFunctionTemplate(Hibernate.STRING, "cast(null as char)"));

然后在你的HQL中使用它:

select id, always_null(), name from ...

答案 1 :(得分:4)

您可以使用nullif()函数生成null。

它接受两个论点。如果参数相等,它将返回null值。

答案 2 :(得分:1)

AFAIK,您的查询不会返回预期结果,只会返回之前的nullid)。但是,以下方法可行

select id as first, '', name from MyClass

我不知道这是一个错误还是只是一个不支持的功能(Hibernate论坛上的HQL help: possible to "select NULL as ..."?线程似乎暗示这是一个错误。)

我不确定我理解你为什么需要这个(可以用select new表达式作为替代吗?)但我担心你必须在这里使用原生SQL。

答案 3 :(得分:1)

您也可以尝试TO_CHAR(null)。它适用于构造函数new Foo(id,name,attr3)中的HQL-Oracle,其中attr3 - 字符串值