簡體   English   中英

獲取集合時發生異常 <Long> 使用Hibernate的值-ClassCastException:java.math.BigDecimal不能強制轉換為java.lang.Long

[英]Exception when getting Collection<Long> values using Hibernate - ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Long

我有列表propertyIds。 我想按集合獲取propertyIds。 這是我的代碼:

Collection<Long> propertyIds = externalTaxManager.getPropertyIdsByTaxId(id);  //Return type must be Collection<Long>

這是我的DAOImpl,

public Collection<Long> getPropertyIdsByTaxId(Long externalTaxId) {
    SQLQuery query = currentSession().createSQLQuery("select b.OMH_PROPERTY_ID from OMH_EXTERNAL_TAX a , " +
                "OMH_EXTERNAL_TAX_PROP_XREF b\n" +
                "where a.OMH_EXTERNAL_TAX_ID=b.OMH_EXTERNAL_TAX_ID and a.OMH_EXTERNAL_TAX_ID = :externalTaxId ")
                .addScalar("OMH_PROPERTY_ID" , LongType.INSTANCE);
        query.setParameter("externalTaxId", externalTaxId);
        Collection<BigDecimal> propertyIdsList = (Collection<BigDecimal>) query.list();
    Long val = null;
    Collection<Long> expRes = new HashSet<Long>();
    for(BigDecimal values : propertyIdsList){
       val = values.longValue();
       expRes.add(val);
    }
    return expRes;
}

上面的查詢返回500+個與externalTaxId關聯的值。

拋出的異常是:

java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Long.

怎么了 ?

查看您的預期收益類型:

Collection<Long>

但是數據庫返回:

Collection<BigDecimal>

因此,您應該將代碼更改為:

Collection<BigDecimal> propertyIdsList =  query.list();

然后嘗試以其他方式將BigDecimal轉換為Long;

^ _ ^原諒我的英語不好。

如下代碼片段對我有用。

   public Collection<Long> getPropertyIdsByTaxId(Long externalTaxId) {
        SQLQuery query = currentSession().createSQLQuery("select b.OMH_PROPERTY_ID from OMH_EXTERNAL_TAX a , " +
                "OMH_EXTERNAL_TAX_PROP_XREF b\n" +
                "where a.OMH_EXTERNAL_TAX_ID=b.OMH_EXTERNAL_TAX_ID and a.OMH_EXTERNAL_TAX_ID = :externalTaxId ")
                .addScalar("OMH_PROPERTY_ID", LongType.INSTANCE);
        query.setParameter("externalTaxId", externalTaxId);
        Collection<BigDecimal> propertyIdsList = (Collection<BigDecimal>) query.list();
        Long propertyIdsListValue = null;
        Collection<Long> propertyIds = new HashSet<Long>();
        for (BigDecimal propertyId : propertyIdsList) {
            propertyIdsListValue = propertyId.longValue();
            propertyIds.add(propertyIdsListValue);
        }
        return propertyIds;
    }

暫無
暫無

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

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