原来,这
ClassCastException可能是由于Hibernate标准查询缓存中的错误所致。
解决方案是在查询中添加标量:
String sql = "select count(*) as result from table";BigDecimal count = (BigDecimal) ht.execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { SQLQuery query = session.createSQLQuery(sql); // Add scalar to avoid bug in Hibernate query cache. query.addScalar("result", Hibernate.BIG_DECIMAL); return query.uniqueResult(); }});
参考文献:
- 带有SQLQuery和setCacheable(Class)的ClassCastException
- Martin Schaaf的博客:具有SQLQuery和setCacheable(true)的ClassCastException
- 使用Hibernate和EhCache缓存原始SQL计数
- HHH-5163在基于可缓存投影的条件上应用ResultTransformer时遇到的错误
- Hibernate尝试使用ResultTransformer缓存结果时发生ClassCastException
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)