我在hibernate状态下写了下面的查询,它给了我NullPointerException
SELECT new com.reddy.ReddyDTO( col1, IF(STRCMP(COL8, 'zero')=0, 'string', col2) ) FROM entity
但是,它使我陷入了NPE,因为它无法将第二列的数据类型确定为字符串类型。
我可以看到它无法通过查看org.hibernate.hql.ast.tree.ConstructorNode.resolveConstructor(String path)方法中的以下位置来确定类型,该字段constructorArgumentTypes具有值(org.hibernate.type.StringType, null)
org.hibernate.hql.ast.tree.ConstructorNode.resolveConstructor(String path)
constructorArgumentTypes
(org.hibernate.type.StringType, null)
如何使hibernate了解此列为String数据类型?(我已经尝试将“ string”放在双引号中,但这给了我错误)
嗯…这是什么IF表情?我在参考文档中找不到它。据我所知,最接近的是一个case表达式:
IF
case
“简单”的情况下,当…然后… else …结束的情况,“搜索”的情况下,当…然后… else …结束的情况
但是我怀疑您可以在构造函数表达式中使用它。
更新: 看来Hibernate比我想象的要好,您 可以 在构造函数表达式中使用一种情况:
SELECT new com.reddy.ReddyDTO(col1, case col8 when 'zero' then 'string' else col2 end) FROM entity