반응형
Spring Hibernate Template 실행 메서드가 Oracle에서 카운트 쿼리에 대해 반환하는 개체 유형은 무엇입니까?
및 오라클 데이터베이스에 대해 실행할 때 다음 Spring Hibernate Template(Spring 2.5 및 Hibernate 3.3.2)가 실행하는 개체의 런타임 유형은 무엇입니까?GA) 코드는 SQL 쿼리가 다음과 같은 카운트 쿼리인 곳을 반환합니다.select count(*) from table
?
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;
이 코드는 다음 예외를 발생시킵니다.
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)
어때.
long value = ((Number)query.uniqueResult()).longValue();
return Long.valueOf(value);
이것은 Long, Double, Biginteger 또는 BigDecimal과 같은 Number의 모든 하위 클래스에 적용됩니다.
알고 보니 그.ClassCastException
최대 절전 모드 표준 쿼리 캐시의 버그 때문일 수 있습니다.
솔루션은 쿼리에 스칼라를 추가하는 것입니다.
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을 사용하는 ClassCastException(참)
- Martin Schaaf의 블로그: SQLQuery 및 setCacheable이 포함된 ClassCastException(참)
- 최대 절전 모드 및 EhCache를 사용하여 원시 SQL 수 캐싱
- 캐시 가능한 투영 기반 기준에서 ResultTransformer를 적용할 때 HHH-5163 버그가 발생합니다.
- 최대 절전 모드에서 ResultTransformer를 사용하여 결과를 캐시하려고 할 때 ClassCastException
Long 타입을 반환하는 것 같습니다.코드에 Long을 사용했습니다.하지만 만약 당신의 빅 십진법이 효과가 있다면 나조차도 반품 유형이 무엇인지 알고 싶습니다 :)
개체의 클래스 유형이 다음과 같습니다.hibernateTemplate.execute()
수익률은 정말로BigDecimal
원인이 밝혀졌습니다.ClassCastException
메소드의 반환 값의 캐스트입니다.doInHibernate()
:
(BigDecimal) query.uniqueResult();
수정된 코드:
BigDecimal count = (BigDecimal) hibernateTemplate.execute(
new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
SQLQuery query = session.createSQLQuery(sql);
return query.uniqueResult();
}});
return count;
언급URL : https://stackoverflow.com/questions/3504751/what-object-type-does-spring-hibernate-template-execute-method-return-for-a-coun
반응형
'it-source' 카테고리의 다른 글
구글 크롬의 그리스몽키 스크립트에서 jQuery를 어떻게 사용할 수 있습니까? (0) | 2023.07.30 |
---|---|
도커 합성을 사용하여 컨테이너에 파일 복사 (0) | 2023.07.30 |
git 명령에 대한 PowerShell의 별칭을 생성하시겠습니까? (0) | 2023.07.30 |
powershell에서 문자열을 정의하기 위한 단일 따옴표와 이중 따옴표의 차이점은 무엇입니까? (0) | 2023.07.25 |
Spring Security : API용 JWT 토큰 및 웹용 세션 (0) | 2023.07.25 |