我需要一个包含三列的列表。第1列和第3列具有值,而第2列为null。 我可以通过HQL查询来完成吗?
我需要这样的东西:
select id, null, name from MyClass
MyClass以及基础表只有两个属性/列,即“id”和“name”
答案 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,您的查询不会返回预期结果,只会返回之前的列null
(id
)。但是,以下方法可行
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 - 字符串值