java - 如何使用 hibernate createSQLQuery 获取整数值?

标签 java hibernate jakarta-ee

我需要获取以下查询的结果,但出现类型转换异常。请大家帮忙!

SELECT COUNT(*) FROM ( SELECT DISTINCT a.PROPSTAT_CODE,a.PROPSTAT_DESC,a.PROPSTAT_TYPE FROM CNFGTR_PROPSTAT_MSTR a WHERE 1 = 1 )

我的代码如下,

Query query = session.createSQLQuery(sqlQuery);  

listRes = query.list();

int ans = ((Integer)listRes.get(0)).intValue();

提前致谢

最佳答案

既然您说您将上述查询包装在另一个返回计数的查询中,那么这将满足您的需求,而无需转换为任何其他数据类型。

    Integer count = (Integer) session.createSQLQuery("select count(*) as num_results from (SELECT DISTINCT a.PROPSTAT_CODE,a.PROPSTAT_DESC,a.PROPSTAT_TYPE FROM CNFGTR_PROPSTAT_MSTR a WHERE 1 = 1)")
        .addScalar("num_results", new IntegerType())
        .uniqueResult();
    System.err.println(count);

诀窍是调用“addScalar”。这告诉 Hibernate 您希望将“num_results”数据类型预先转换为整数,无论​​您的特定数据库实现或 JDBC 驱动程序更喜欢什么。如果没有这个,Hibernate 将使用 JDBC 驱动程序首选的类型,这解释了为什么这里的不同答案有不同的强制转换。如果您希望针对不同的关系数据库运行应用程序,则专门设置所需的结果类型可以消除有关返回的数据类型的所有猜测,为您提供正确的结果,并且具有更可移植性的额外好处。如果您调用“list”而不是“uniqueResult”,那么您可以将结果直接分配给列表

关于java - 如何使用 hibernate createSQLQuery 获取整数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23338412/

相关文章:

java - 在 Java 6 上显示最大字符串和字符数组内容的命令。如何实现?

java - 如何在 Multi-Tenancy 系统中为指定租户切换jpa方言

java - java中mysql中的数据源多个数据库

hibernate - 在 eclipse 中使用 wildfly 的 postgres 数据库

java - 使用Java RMI,序列化对象到底什么时候通过网络传输?

java - 休息服务不适用于 spring boot 应用程序

java - java按什么顺序对文件/目录进行排序?

java - 插入场景中按版本划分的 JPA/Hibernate 乐观锁

java - 将大图像设置为背景

java - 为一个条目输入的值存储在其他条目中,而不是唯一值