将hibernate 3更新为hibernate 5后发生java SQLQuery列表强制转换异常
将hibernate 3更新为hibernate 5后发生SQLQuery列表强制转换异常。这是我的密码
public List<List<String>> getReportQuery(String query) {
Session sess = getSessionFactory().getCurrentSession();
final List<List<String>> table = new ArrayList<List<String>>();
sess.beginTransaction();
SQLQuery it = sess.createSQLQuery(query);
table.add(it.list());
return table;
}
相同的代码在hibernate 3中有效,但在hibernate 5中无效,我尝试将其转换为字符串
List<String> res = it.list();
for(String s : res){
List<String> temp = new ArrayList<String>();
temp.add(s);
table.add(temp);
}
}
但同样的例外情况也会出现
[Ljava.lang.Object; cannot be cast to java.lang.String
# 1 楼答案
我通过向查询实例添加
it.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
解决了这个问题。 这将结果集转换为映射工作守则
# 2 楼答案
这可能是由于使用了“createSQLQuery()”方法,该方法现在已从hibernate 5.2中弃用。勾选hibernate docs
当我们从hibernate 5.0升级到hibernate 5.2时,我遇到了类似的异常,请参阅下面的堆栈跟踪以了解更多详细信息。我的测试用例在出现这些异常时停止工作。一旦我用最新的方法替换了不推荐的方法,它又开始工作了