如何在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
类映射,具有emailid
和password
实例变量。然后你会执行类似的东西:
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 循环?
如何在 Tomcat 6 中为 Hibernate 使用 JTA 支持?
java - 如何在hibernate java中为给定的xml使用注释