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

o7jaxewo  于 2023-01-19  发布在  Java
关注(0)|答案(5)|浏览(167)

我需要一个有三列的列表。第一列和第三列有值,而第二列为空。我可以通过HQL查询完成吗?
我需要这样的东西:

select id, null, name from MyClass

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

km0tfn4u

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 ...
z9smfwbn

z9smfwbn2#

可以使用nullif()函数生成null。
它接受两个参数,如果参数相等,它将返回null值。

62lalag4

62lalag43#

AFAIK,您的查询不会返回预期的结果,它只会返回null之前**的列(在您的示例中为id)。

select id as first, '', name from MyClass

我不知道这是一个bug还是仅仅是一个不支持的特性(Hibernate论坛上的HQL help: possible to "select NULL as ..."?线程似乎表明这是一个bug)。
我不确定我是否理解了您为什么需要它(select new表达式可以作为替代方案吗?),但恐怕您必须在这里使用原生SQL。

zc0qhyus

zc0qhyus4#

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

mqxuamgl

mqxuamgl5#

select id, null as collumn_name, name from MyClass

相关问题