[SPRING] Spring Hibernate 템플릿은 오라클의 계산 쿼리에서 어떤 객체 유형을 반환합니까?
SPRINGSpring Hibernate 템플릿은 오라클의 계산 쿼리에서 어떤 객체 유형을 반환합니까?
SQL 쿼리가 select count (*) from table과 같은 계산 쿼리 인 곳에서 Spring Hibernate 템플릿 (Spring 2.5 및 Hibernate 3.3.2GA) 코드가 반환하는 객체의 런타임 유형은 무엇입니까?
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;
이 코드는 다음 예외를 throw합니다.
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)
해결법
-
==============================
1.어때?
어때?
long value = ((Number)query.uniqueResult()).longValue(); return Long.valueOf(value);
이것은 Long, Double, Biginteger 또는 BigDecimal과 같은 Number의 모든 서브 클래스에서 작동합니다.
-
==============================
2.ClassCastException은 Hibernate 표준 쿼리 캐시의 버그 때문일 수 있습니다.
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(); } });
참고 문헌 :
-
==============================
3.나는 Long 타입을 리턴한다고 생각한다. 내 코드에서 Long을 사용했습니다. 하지만 BigDecimal이 작동하는 경우에도 반환 유형이 무엇인지 알고 싶습니다. :)
나는 Long 타입을 리턴한다고 생각한다. 내 코드에서 Long을 사용했습니다. 하지만 BigDecimal이 작동하는 경우에도 반환 유형이 무엇인지 알고 싶습니다. :)
-
==============================
4.hibernateTemplate.execute ()가 반환하는 객체의 클래스 유형은 실제로 BigDecimal입니다. ClassCastException의 원인은 doInHibernate () 메소드의 반환 값의 형 변환이다.
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;
from https://stackoverflow.com/questions/3504751/what-object-type-does-spring-hibernate-template-execute-method-return-for-a-coun by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 최대 절전 모드, 스프링 및 SLF4J 바인딩 (0) | 2019.03.15 |
---|---|
[SPRING] 왜 우리는 Data Jpa에서 질의를 위해 @Modifying 어노테이션을 사용해야 만 하는가? (0) | 2019.03.15 |
[SPRING] 하나의 컨텍스트에서 Spring bean을 다른 컨텍스트의 mock 버전으로 대체하십시오. (0) | 2019.03.15 |
[SPRING] 404 오류가있는 봄 보안 문제가 있습니까? (0) | 2019.03.15 |
[SPRING] 봄 부팅 응용 프로그램에서 여러 데이터베이스에서 테이블이 생성되지 않음 (0) | 2019.03.15 |