例如,如果我们有一个表Books,我们如何用hibernate计算图书记录的总数?
当前回答
在Java中,我通常需要返回int并使用这种形式:
int count = ((Long)getSession().createQuery("select count(*) from Book").uniqueResult()).intValue();
其他回答
在Java中,我通常需要返回int并使用这种形式:
int count = ((Long)getSession().createQuery("select count(*) from Book").uniqueResult()).intValue();
这在Hibernate 4(已测试)中有效。
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();
}
以下是官方hibernate文档告诉我们的:
查询结果不返回,可以统计查询结果个数:
( (Integer) session.createQuery("select count(*) from ....").iterate().next() ).intValue()
但是,它并不总是返回Integer实例,因此为了安全起见,最好使用java.lang.Number。
如果您正在使用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();
对于Hibernate的旧版本(<5.2):
假设类名为Book:
return (Number) session.createCriteria("Book")
.setProjection(Projections.rowCount())
.uniqueResult();
它至少是一个数字,很可能是一个长。
推荐文章
- 为什么ArrayDeque比LinkedList好
- 如何使用旧版本的Hibernate(~2009)来计算行数?
- Java泛型什么时候需要<?扩展T>而不是<T>,切换有什么缺点吗?
- 如果性能很重要,我应该使用Java的String.format()吗?
- getResourceAsStream返回null
- 如何使用Java中的Scanner类从控制台读取输入?
- 如何添加JTable在JPanel与空布局?
- Statement和PreparedStatement的区别
- 为什么不能在Java中扩展注释?
- 在Java中使用UUID的最重要位的碰撞可能性
- 转换列表的最佳方法:map还是foreach?
- 如何分割逗号分隔的字符串?
- Java字符串—查看字符串是否只包含数字而不包含字母
- Mockito.any()传递带有泛型的接口
- 在IntelliJ 10.5中运行测试时,出现“NoSuchMethodError: org.hamcrest. matcher . descripbemismatch”