【发布时间】:2020-03-03 13:54:16
【问题描述】:
我对在选择中包含空值的 hql 查询有疑问,例如: "select firstname, lastname, null from Employer"
Nullpointer 来自:
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;
}
我将其缩小到新的 Class NullNode(自 Hibernate 5 起添加),它只是为 getType() 返回 null:
public class NullNode extends AbstractSelectExpression {
public Type getDataType() {
return null;
}
....
}
所以我的问题是..这是休眠中的错误还是我在那个地方错过了休眠?
【问题讨论】:
-
使用调试器并查看值为 null
types[i]或f -
types[i] 为 null,因为来自 NullNode 的 getDataType() 总是返回 null
-
你解决过这个问题吗?
-
很遗憾,没有。我最终从 select 语句中删除了 null 并对结果进行了不同的处理。
标签: java orm nullpointerexception hibernate-5.x