更新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中没有,我试着将它转换为String,
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
答案 0 :(得分:1)
这可能是由于使用&#39; createSQLQuery()&#39;从hibernate 5.2中弃用的方法。检查hibernate docs。
当我们从hibernate 5.0升级到hibernate 5.2时,我遇到了类似的异常,请参阅下面的堆栈跟踪以获取更多详细信息。我的测试用例停止了这些例外。一旦我用最新的方法替换了已弃用的方法,它又开始工作了。
java.lang.ClassCastException: java.util.GregorianCalendar cannot be cast to java.util.Date
at org.hibernate.type.descriptor.java.JdbcTimestampTypeDescriptor.unwrap(JdbcTimestampTypeDescriptor.java:24) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.type.descriptor.sql.TimestampTypeDescriptor$1.doBind(TimestampTypeDescriptor.java:48) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:74) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:280) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:275) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.engine.query.spi.NativeSQLQueryPlan.bindNamedParameters(NativeSQLQueryPlan.java:137) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.engine.query.spi.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:200) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.internal.SessionImpl.executeNativeUpdate(SessionImpl.java:1575) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.query.internal.NativeQueryImpl.doExecuteUpdate(NativeQueryImpl.java:274) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1504) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
答案 1 :(得分:0)
我通过将public void onClickExampleMethod(View view) {
// Handle click
}
添加到我的查询实例来解决了这个问题。
这会将结果集转换为map
工作代码,
it.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);