例如,如果我们有一个表Books,我们如何用hibernate计算图书记录的总数?
当前回答
在Java中,我通常需要返回int并使用这种形式:
int count = ((Long)getSession().createQuery("select count(*) from Book").uniqueResult()).intValue();
其他回答
你可以试试count(*)
Integer count = (Integer) session.createQuery("select count(*) from Books").uniqueResult();
其中Books是类外的名称,而不是数据库中的表。
在Java中,我通常需要返回int并使用这种形式:
int count = ((Long)getSession().createQuery("select count(*) from Book").uniqueResult()).intValue();
对于Hibernate的旧版本(<5.2):
假设类名为Book:
return (Number) session.createCriteria("Book")
.setProjection(Projections.rowCount())
.uniqueResult();
它至少是一个数字,很可能是一个长。
Long count = (Long) session.createQuery("select count(*) from Book").uniqueResult();
以下是官方hibernate文档告诉我们的:
查询结果不返回,可以统计查询结果个数:
( (Integer) session.createQuery("select count(*) from ....").iterate().next() ).intValue()
但是,它并不总是返回Integer实例,因此为了安全起见,最好使用java.lang.Number。
推荐文章
- JavaBean和POJO之间的区别是什么?
- 注释在Java中如何使用,在哪里使用?
- 如何在Ubuntu下安装JDK 11 ?
- Spring Boot -无法确定数据库类型为NONE的嵌入式数据库驱动程序类
- 如何转换/解析从字符串到字符在java?
- 如何在Android中动态更改菜单项文本
- 如何比较两个没有时间部分的日期?
- 如何在Java中找到给定类的所有子类?
- 匿名类的访问构造函数
- 从Java访问Kotlin扩展函数
- 解析LocalDateTime时无法从TemporalAccessor获取LocalDateTime (Java 8)
- 以AM/PM的12小时格式显示当前时间
- 求两个集合的差值
- Junit @Rule如何工作?
- SSL握手警告:unrecognized_name错误,因为升级到Java 1.7.0