What object type does Spring Hibernate Template execute method return for a counting query on Oracle?

后端 未结 4 856
不知归路
不知归路 2020-12-31 10:19

When run against and Oracle database, what is the runtime type of the object that the following Spring Hibernate Template (Spring 2.5 and Hibernate 3.3.2GA) code returns whe

4条回答
  •  耶瑟儿~
    2020-12-31 11:08

    Turns out that the ClassCastException may be due to a bug in the Hibernate standard query cache.

    Solution is to add a scalar to the query:

    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();
        }
    });
    

    References:

    • ClassCastException with SQLQuery and setCacheable(true)
    • Martin Schaaf's Blog: ClassCastException with SQLQuery and setCacheable(true)
    • Caching a raw sql count with Hibernate and EhCache
    • HHH-5163 Bug when applying a ResultTransformer on a cacheable projection based criteria
    • ClassCastException when Hibernate tries to cache results using ResultTransformer

提交回复
热议问题