[java] 이전 버전의 Hibernate (~ 2009)를 사용하여 행을 어떻게 계산합니까?

예를 들어, Books 테이블이 있다면 최대 절전 모드의 총 장부 레코드 수를 어떻게 계산합니까?



답변

이전 버전의 최대 절전 모드 (<5.2)의 경우 :

클래스 이름이 Book이라고 가정합니다.

return (Number) session.createCriteria("Book")
                  .setProjection(Projections.rowCount())
                  .uniqueResult();

적어도 Number, 아마도 Long.


답변

Java에서는 보통 int를 반환 하고이 양식을 사용해야합니다.

int count = ((Long)getSession().createQuery("select count(*) from Book").uniqueResult()).intValue();


답변

다음은 공식 최대 절전 모드 문서에서 우리에게 알려주 는 것입니다 .

쿼리 결과 수를 반환하지 않고 계산할 수 있습니다.

( (Integer) session.createQuery("select count(*) from ....").iterate().next() ).intValue()

그러나 항상 Integer인스턴스를 반환하지는 않으므로 java.lang.Number안전 을 위해 사용하는 것이 좋습니다 .


답변

당신은 시도 할 수 있습니다 count(*)

Integer count = (Integer) session.createQuery("select count(*) from Books").uniqueResult();

데이터베이스의 테이블이 아닌 Books이름이 어디에 있습니까 class?


답변

Hibernate 5 이상을 사용하는 경우 쿼리는 다음과 같이 수정됩니다

Long count = session.createQuery("select count(1) from  Book")
                    .getSingleResult();

또는 TypedQuery가 필요한 경우

Long count = session.createQuery("select count(1) from  Book",Long.class)
                        .getSingleResult();


답변

Long count = (Long) session.createQuery("select count(*) from  Book").uniqueResult();


답변

이것은 Hibernate 4 (Tested)에서 작동합니다.

String hql="select count(*) from  Book";
Query query= getCurrentSession().createQuery(hql);
Long count=(Long) query.uniqueResult();
return count;

getCurrentSession ()은 다음과 같습니다.

@Autowired
private SessionFactory sessionFactory;


private Session getCurrentSession(){
return sessionFactory.getCurrentSession();
}