2017-09-03 59 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

如何定義'root'? –

+0

加入問題 –

回答

0

感謝@ O.Badr詢問root,這讓我在代碼的這一部分看起來更加密切。

該問題是由使用來自不同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); 
    }