IT story

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

hot-time 2020. 4. 9. 08:09
반응형

이전 버전의 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();
}

다음 JPQL 쿼리를 실행하면 매우 쉽습니다.

int count = (
(Number)
    entityManager
    .createQuery(
        "select count(b) " +
        "from Book b")
    .getSingleResult()
).intValue();

우리가 캐스팅하는 이유는 Number일부 데이터베이스는 반환 Long하고 다른 데이터베이스는 반환 BigInteger하기 때문에 이식성을 위해 계산할 행 수에 따라 a Numberinta 또는 a로 캐스팅하는 것이 좋습니다 long.

참고 URL : https://stackoverflow.com/questions/1372317/how-do-we-count-rows-using-older-versions-of-hibernate-2009

반응형