小编典典

确定休眠中查询列的数据类型的问题

hibernate

我在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)

如何使hibernate了解此列为String数据类型?(我已经尝试将“ string”放在双引号中,但这给了我错误)


阅读 269

收藏
2020-06-20

共1个答案

小编典典

嗯…这是什么IF表情?我在参考文档中找不到它。据我所知,最接近的是一个case表达式:

“简单”的情况下,当…然后… else …结束的情况,“搜索”的情况下,当…然后… else …结束的情况

但是我怀疑您可以在构造函数表达式中使用它。

更新: 看来Hibernate比我想象的要好,您 可以 在构造函数表达式中使用一种情况:

SELECT new com.reddy.ReddyDTO(col1, case col8 when 'zero' then 'string' else col2 end) FROM entity

参考

2020-06-20