2017-09-03 3 views
0

나는 그것은 긴 유효 법인 아니다라고Hibernate5 : 레코드 수 쿼리를 위해 루트 <Long>을 얻는 방법?

final Session session = sessionFactory.getCurrentSession(); 
final CriteriaBuilder builder = sessionFactory.getCriteriaBuilder(); 
final CriteriaQuery<ListingDetailBaseDto> criteria = builder.createQuery(ListingDetailBaseDto.class); 
final Root<ListingDetailBaseDto> root = criteria.from(ListingDetailBaseDto.class); 

...

public int countRecords() { 
    final CriteriaQuery<Long> countingQuery = builder.createQuery(Long.class); 
    countingQuery.select(countingQuery.from(Long.class)); 
    countingQuery.select(builder.count(root)); 
    final Query<Long> query = session.createQuery(countingQuery); 
    return query.getSingleResult().intValue(); 
}  

이 코드를 가지고있다. 그래서 라인 3,

public int countRecords() { 
    final CriteriaQuery<Long> countingQuery = builder.createQuery(Long.class); 
    countingQuery.select(builder.count(root)); 
    final Query<Long> query = session.createQuery(countingQuery); 
    return query.getSingleResult().intValue(); 
} 

제거하고 오류가된다 : No criteria query roots were specified

나는이 간단한 레코드 수를 얻을 수있는 방법 ???

+0

어떻게'루트'를 정의합니까? –

+0

질문에 추가 –

답변

0

root에 대해 묻는 @ O.Badr에게 감사드립니다. 코드의 해당 부분을 좀 더 자세히 살펴 보았습니다.

CriteriaQuery 개체의 root을 사용하면이 문제가 발생합니다.

고정 코드 :

public int countRecords() { 
    final CriteriaQuery<Long> countingQuery = builder.createQuery(Long.class); 
    countingQuery.select(builder.count(countingQuery.from(ListingDetailBaseDto.class))); 
    final Query<Long> query = session.createQuery(countingQuery); 
    return query.getSingleResult().intValue(); 
}  
+0

좋아, 잘 찾았으니 이제 답변을 수락 할 수 있습니다! –

0
약간 주제 오프

,하지만 우리는 최대 절전 모드를 버렸어, 그래서 훨씬 좋네요 IMO.

class ListingDetailsDao extends JdbcDaoSupport { 

    public ListingDetailsDao (@Autowired @Qualifier("myDataSource") DataSource dataSource) { 

     setDataSource(dataSource); 
    } 

    public int count() { 

     final String sql = "select count (*) from listing_details"; 
     return getJdbcTemplate().queryForObject(sql, Integer.class); 
    }