2014-02-10 1 views
1

Hibernate Criteria 쿼리를 사용하여 특정 조건과 일치하는 테이블의 행 수를 얻으려고합니다.Projections.count ("fieldName")은 항상 Long을 생성합니까?

SELECT COUNT(*) FROM MyTable WHERE field1 = <numVal> and field2 = 'strVal2' 

같은 뭔가가 여기에

public static int getTransactionCount(Session session, int parentID) { 

     Criteria criteria = session.createCriteria(MyTable.class); 

     return (Integer) criteria.add(Restrictions.eq("parentID", parentID)) 
       .add(Restrictions.eq("txnType", TransactionType.SOME_TYPE)) 
       .setProjection(Projections.count("txnID")).uniqueResult(); 

    } 

내가 뭔가 내 기준 코드 문제가 있습니까

 Caused by: java.lang.ClassCastException: 
java.lang.Long cannot be cast to java.lang.Integer 
    at com.mydomain.MyClass.getTransactionCount(MyClass.java:123) 

얻거나 내가 항상 수를 얻기에서 긴을 기대해야 내 기준 코드?

답변

1

긴 형식을 사용해야합니다. 기준에 일치하는 항목의 수가 Integer.MAX (2147483647)를 초과 할 수 있습니다 (대용량 DB가있는 일부 시나리오). 따라서 리턴 타입은 Long.MAX이며 천문학적 인 크기입니다 (9223372036854775807). JPA 사양에서오고

1

상기 :

함수 COUNT의 결과가 그룹의 값의 개수를 나타내는 long 값이다.

함수 AVG의 결과는 그룹의 평균 을 나타내는 Double 값입니다.

SUM 함수의 결과는 합산 필드 인 경우에는 길이 필드 더블 경우 긴 더블

관련 문제