我需要一个有三列的列表。第一列和第三列有值,而第二列为空。我可以通过HQL查询完成吗?我需要这样的东西:
select id, null, name from MyClass
其中MyClass以及基础表只有两个属性/列,即“id”和“name”
km0tfn4u1#
另一个似乎可行的选项(在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 ...
z9smfwbn2#
可以使用nullif()函数生成null。它接受两个参数,如果参数相等,它将返回null值。
nullif()
null
62lalag43#
AFAIK,您的查询不会返回预期的结果,它只会返回null之前**的列(在您的示例中为id)。
id
select id as first, '', name from MyClass
我不知道这是一个bug还是仅仅是一个不支持的特性(Hibernate论坛上的HQL help: possible to "select NULL as ..."?线程似乎表明这是一个bug)。我不确定我是否理解了您为什么需要它(select new表达式可以作为替代方案吗?),但恐怕您必须在这里使用原生SQL。
select new
zc0qhyus4#
您还可以尝试TO_CHAR(null)。它在构造函数new Foo(id,name,attr 3)中适用于HQL- Oracle,其中attr 3-字符串值
mqxuamgl5#
select id, null as collumn_name, name from MyClass
5条答案
按热度按时间km0tfn4u1#
另一个似乎可行的选项(在DB2、MySQL、Oracle和SQL Server上测试):
您可以将Hibernate方言子类化,并使用自定义函数对其进行抽象:
然后在HQL中使用它:
z9smfwbn2#
可以使用
nullif()
函数生成null。它接受两个参数,如果参数相等,它将返回
null
值。62lalag43#
AFAIK,您的查询不会返回预期的结果,它只会返回
null
之前**的列(在您的示例中为id
)。我不知道这是一个bug还是仅仅是一个不支持的特性(Hibernate论坛上的HQL help: possible to "select NULL as ..."?线程似乎表明这是一个bug)。
我不确定我是否理解了您为什么需要它(
select new
表达式可以作为替代方案吗?),但恐怕您必须在这里使用原生SQL。zc0qhyus4#
您还可以尝试TO_CHAR(null)。它在构造函数new Foo(id,name,attr 3)中适用于HQL- Oracle,其中attr 3-字符串值
mqxuamgl5#