gpt4 book ai didi

java - Hibernate NameGenerator 中带有 hql 查询的 NullpointerException

转载 作者:行者123 更新时间:2023-12-05 07:12:13 67 4
gpt4 key购买 nike

我对在选择中包含空值的 hql 查询有疑问,例如:“从雇主中选择名字,姓氏,空值”

空指针来自:

Caused by: java.lang.NullPointerException
at org.hibernate.hql.internal.NameGenerator.generateColumnNames(NameGenerator.java:27)

所以 NameGenerator 中那一行的代码:

public static String[][] generateColumnNames(Type[] types, SessionFactoryImplementor f) throws MappingException {
String[][] columnNames = new String[types.length][];
for ( int i = 0; i < types.length; i++ ) {
int span = types[i].getColumnSpan( f ); // <-- line 27
columnNames[i] = new String[span];
for ( int j = 0; j < span; j++ ) {
columnNames[i][j] = NameGenerator.scalarName( i, j );
}
}
return columnNames;
}

我将范围缩小到新类 NullNode (从 Hibernate 5 开始添加),它只是为 getType() 返回 null:

public class NullNode extends AbstractSelectExpression {

public Type getDataType() {
return null;
}
....
}

所以我的问题是..这是 hibernate 中的错误还是我在那个地方误用了 hibernate ?

最佳答案

hql 和 jpql BNF 规范都不允许直接为 select 子句中的列使用 NULL 值(只有在更新语句 BNF 中我才能找到 NULL 作为允许值)。

但是,如果您指定预期的数据类型,hibernate 似乎支持空列,我可以成功地使用:

select cast(null as string) from Employer

在我的例子中,hibernate 5.4.32 也指向这个方向。我没有收到 NPE,而是以下错误:

Caused by: org.hibernate.QueryException: No data type for node: org.hibernate.hql.internal.ast.tree.NullNode 
\-[NULL] NullNode: 'null'
[select null from com.example.demo.Employer]

关于java - Hibernate NameGenerator 中带有 hql 查询的 NullpointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60508788/

67 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com