如何在hibernate中为count(*)编写查询

Posted

技术标签:

【中文标题】如何在hibernate中为count(*)编写查询【英文标题】:How to write a query in hibernate for count(*) 【发布时间】:2013-06-27 08:21:03 【问题描述】:

我想在Hibernate中执行下面的查询?

select count(*) from login where emailid='something' and password='something'

【问题讨论】:

嗯...select count(*) from Login login where login.emailid='something' and login.password='something' 怎么样?或者您是在问如何执行 HQL 查询? 【参考方案1】:

假设您的login 表由LoginClass 类映射,具有emailidpassword 实例变量。然后你会执行类似的东西:

Query query = session.createQuery(
        "select count(*) from LoginClass login where login.emailid=:email and login.password=:password");
query.setString("email", "something");
query.setString("password", "password");
Long count = (Long)query.uniqueResult();

它应该在count 中返回您正在寻找的结果。您只需要根据您的类和参数名称调整名称即可。

【讨论】:

以同样的方式使用它,我得到一个错误,表或视图不存在。带有表名的查询在 db 中运行良好。知道错误是什么吗? 适用于 Hibernate 5.3.1。 我不得不使用 getSingleResult() 而不是 uniqueResult()。后者不可用 如果像我这样的人在尝试使用上述解决方案时遇到 BigDecimal cannot cast it to Long 的错误,请使用:Long count = ((BigDecimal) query.uniqueResult()).longValue(); 此查询不是有效的 HQL,如果 Hibernate 变得更加严格,我将不再工作。应该是 select count(login) from LoginClass login【参考方案2】:

结果返回 BigDecimal,您需要将其从 BigDecimal (java.math.BigDecimal) 转换为 Long 以便没有错误,他的解决方案是这样的:

Query query = session.createSQLQuery(
        "select count(*) from login where login.emailid=:email and login.password=:password");
query.setString("email", "something");
query.setString("password", "password");
Long count = ((BigDecimal) query.uniqueResult()).longValue();

【讨论】:

此查询不是有效的 HQL,如果 Hibernate 变得更加严格,我将不再工作。应该是 select count(login) from LoginClass login 不,我用的是hibernate但原生的,它已经改变了 嗯,好的。感谢修复

以上是关于如何在hibernate中为count(*)编写查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 3 中为我在 for 循环期间修改的数组编写 for 循环?

如何在 Hibernate 中为某些实体禁用模式验证?

如何在 Tomcat 6 中为 Hibernate 使用 JTA 支持?

java - 如何在hibernate java中为给定的xml使用注释

如何在 Hibernate 中为每个公司创建一个 customerNumber 生成器

如何在 Hibernate 中为加入的集合指定“NOT IN”