반응형
이전 버전의 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 Number
및 int
a 또는 a로 캐스팅하는 것이 좋습니다 long
.
반응형
'IT story' 카테고리의 다른 글
UnicodeDecodeError : 'utf8'코덱이 바이트 0x9c를 디코딩 할 수 없습니다 (0) | 2020.04.09 |
---|---|
널 입력 가능 유형 및 삼항 연산자 : 왜`? (0) | 2020.04.09 |
dict를 사용하여 팬더 열의 값을 다시 매핑하십시오. (0) | 2020.04.09 |
Eclipse는 일치하는 변수를 강조 표시하지 않습니다 (0) | 2020.04.09 |
CSS의 HTML colspan (0) | 2020.04.09 |