【问题标题】:expected type: java.lang.Double actual value: java.lang.Integer error in hibernate预期类型:java.lang.Double 实际值:java.lang.Integer 休眠错误
【发布时间】:2015-08-02 23:46:41
【问题描述】:

我使用 createSqlQuery 接口在休眠中调用存储过程,并使用结果转换器将结果作为 bean。 下面是我的代码

Query query=sessionfactory.getCurrentSession().createSQLQuery("exec usp_ListUsersNotSubmitTimesheet :startDate,:endDate");
        query.setDate("startDate", formatter.parse(startDate));
        query.setDate("endDate", formatter.parse(endDate));
        query.setResultTransformer(Transformers.aliasToBean(UnSubmittedTimesheetBean.class));
List queryList=query.list();

有时 sp 结果返回所有整数值,有时返回十进制值,有时是固定的。所以我无法给出特定的数据类型。 所以我得到了以下异常

expected type: java.lang.Double actual value: java.lang.Integer 

如何解决这个错误?

任何帮助将不胜感激!!!

【问题讨论】:

  • 我想说你要么必须创建多个存储过程,要么使用单个返回类型(例如十进制)并在需要时将 Double 值转换为 Integer

标签: java spring hibernate exception


【解决方案1】:

您的存储过程正在返回 Integer 数据类型值,我猜在您的 bean 中,映射列被定义为 Double 所以当 Transformer 将在 Bean 中设置结果时,它试图将 Integer 值设置为 Double 值并且它是抛出异常...

1> 您可以在 Bean 类中进行更改(可以将列设为整数)。

2> 您可以更改返回双精度的过程类型。

3> 复杂的你不能改变以上任何一个你可以通过扩展“AbstractQueryTransformer”来编写你自己的结果转换器。

我更喜欢第二个。

【讨论】:

  • 您可以添加选项 2 的实现示例吗?
  • @C_B 找出 Bean 抱怨的变量。就我而言,我从过程中返回了一个临时表,其中包含 Quantity INT(11) 列。 Java 中的 bean 有私有的 Float 数量(getter 和 setter)。我将 Stored Proc 中的列更改为 Quantity FLOAT(4,2) 并且它起作用了。
【解决方案2】:

我的解决方案只是在存储过程中添加转换为 int / decimal

这样您就可以轻松处理结果转换器 bean 中的数据类型。 否则,在您的结果转换器中,将所有这些字段设为“数字”,然后根据您的需要将“数字”对象更改为任何其他内容。

【讨论】:

    【解决方案3】:

    最快的解决方案,更改存储过程,使结果始终是双精度数,不管任何事情(您需要更改 sp 代码,可能是返回类型,因为我不知道您的 sp)。 如果您无法触摸数据库,解决方案:构建一个结果转换器以接受整数、浮点数等,并在进行一些处理后将其容纳为双精度。

    【讨论】:

      【解决方案4】:

      我在 2 个字段中遇到了类似的复杂 SQL 连接。控制台上显示的异常是

      预期类型:java.lang.Double 实际值:java.math.BigDecimal

      为了解决这个问题,我使用 addScalar() 方法显式映射了这些字段的数据类型

      session.createSQLQuery(query.toString())
                      .addScalar("offerid", StandardBasicTypes.INTEGER)
                      .addScalar("offervalue", StandardBasicTypes.DOUBLE)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-20
        相关资源
        最近更新 更多