예를 들어, 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();
}