期望类型:java.lang.Double实际值:hibernate中的java.lang.Integer错误

时间:2015-05-21 10:47:26

标签: java spring hibernate exception

我使用createSqlQuery接口在hibernate中调用存储过程,我使用结果转换器将结果作为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 

如何解决此错误?

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

4 个答案:

答案 0 :(得分:0)

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

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

2 - ;您可以更改将返回Double Precision的返回类型的过程。

3>并且你们中很复杂的人不允许改变以上任何一种你可以通过扩展" AbstractQueryTransformer"来编写你自己的结果变换器。

我更喜欢第二个。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我面对2个字段的复杂SQL连接遇到了类似问题。控制台上显示的例外是

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

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

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