私はリストのpropertyIdsを持っています。そして私はコレクションによってpropertyIdを取得したい。クエリ上記Collection <Long>の値がHibernateを使用して取得されている場合 - ClassCastException:java.math.BigDecimalをjava.lang.Longにキャストすることができません
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;
}
がexternalTaxIdと関連付けるに500+の値を返します。これは私のコードです。スロー
例外は次のとおりです。間違っている
java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Long.
何?
カラム 'OMH_EXTERNAL_TAX_PROP_XREF.OMH_PROPERTY_ID'の定義は何ですか?これはどこかの 'BigDecimal'にマップされており、' Long'にキャストできません。 –
OMH_PROPERTY_IDはNOT NULL NUMBER(38) – yogesh
これは 'Long'には長すぎますので、HibernateはこれをBigDecimalとして返します。あなたのコレクションを 'Collection'に変更してください。本当に38桁のIDが必要ですか? –