Khi chạy ngược lại và cơ sở dữ liệu Oracle, kiểu thời gian chạy của đối tượng mà mã Spring Hibernate Template (Spring 2.5 và Hibernate 3.3.2GA) sau đây trả về nơi truy vấn SQL là truy vấn đếm như select count(*) from table
?Kiểu đối tượng nào Spring Nibernate Template thực thi phương thức trả về cho một truy vấn đếm trên Oracle?
String sql = "select count(*) from table";
BigDecimal count = (BigDecimal) hibernateTemplate.execute(
new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
SQLQuery query = session.createSQLQuery(sql);
return (BigDecimal) query.uniqueResult();
}});
return count;
Mã này ném ngoại lệ sau đây:
javax.ejb.EJBException: EJB Exception: : java.lang.ClassCastException: java.math.BigDecimal cannot be cast to [Ljava.lang.Object;
at org.hibernate.cache.StandardQueryCache.put(StandardQueryCache.java:83)
at org.hibernate.loader.Loader.putResultInQueryCache(Loader.java:2185)
at org.hibernate.loader.Loader.listUsingQueryCache(Loader.java:2129)
at org.hibernate.loader.Loader.list(Loader.java:2087)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:150)
at org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:804)
at com.db.abstrack.dao.hibernate.RfqCdoUsDaoHibernate$1.doInHibernate(RfqCdoUsDaoHibernate.java:124)
Erm, chạy mã? Nếu không có ClassCastException, đó là một BigDecimal, nếu không ngoại lệ sẽ cho bạn biết đó là loại gì. (HibernateTemplate.execute trả về đối tượng được trả về bởi HibernateCallback được cung cấp, mà bạn đưa vào BigDecimal). – meriton
Bạn đang sử dụng phiên bản thư viện ngủ đông nào? Nó được sử dụng để trả về một Integer, nhưng bây giờ nó phải là một Long. –
Đã cập nhật câu hỏi để hiển thị Hibernate 3.3.2GA. –