簡體   English   中英

預期類型:java.lang.Double 實際值:hibernate 中的 java.lang.Integer 錯誤

[英]expected type: java.lang.Double actual value: java.lang.Integer error in hibernate

我使用 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 

如何解決此錯誤?

任何幫助將不勝感激!!!

您的存儲過程正在返回 Integer 數據類型值,我猜在您的 bean 中映射列被定義為 Double,因此當 Transformer 將在 Bean 中設置結果時,它試圖將 Integer 值設置為 Double 值,並在那里拋出異常。 ..

1> 您可以在 Bean 類中進行更改(可以將列設為整數)。

2> 您可以更改將返回雙精度的過程的返回類型。

3> 和復雜的你不能改變以上任何一個你可以通過擴展“AbstractQueryTransformer”來編寫你自己的Result Transformer。

我更喜歡第二個。

我的解決方案只是在您的存儲過程中添加轉換為 int/decimal

這樣您就可以輕松處理結果轉換器 bean 中的數據類型。 否則,結果轉換器將所有這些字段都設置為“數字”,然后根據需要將“數字”對象更改為任何其他內容。

最快的解決方案,更改存儲過程,以便結果始終是雙精度數,無論什么(您需要更改 sp 代碼,可能是返回類型,因為我不知道您的 sp)。 如果您無法觸摸 db 的解決方案:構建一個結果轉換器以接受整數、浮點數等,並在進行一些處理后將其容納為雙精度數。

我遇到了類似的 2 個字段的復雜 SQL 連接。 控制台上顯示的異常是

預期類型:java.lang.Double 實際值:java.math.BigDecimal

為了解決這個問題,我使用 addScalar() 方法顯式映射了這些字段的數據類型

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM