簡體   English   中英

java.lang.ClassCastException:java.math.BigDecimal 不能轉換為 java.lang.Long

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

我在 OrderService.java 中有這段代碼

    public void deleteOrderByUserId(int userId){
       List<Long> orderIds = orderDAO.getOrderIdByUserId(userId);
       int deleteOrders = orderDAO.deleteOrders(orderIds);
    }

這是順序DAO.java中的代碼

public List getOrderIdByUserId(int userId) {
    StringBuilder queryStr = new StringBuilder("select distinct u.OrderId from ");
    queryStr.append("User u where ");
    queryStr.append("u.UserId in (:key)");

    return getHibernateTemplate().getSessionFactory()
            .getCurrentSession().createSQLQuery(queryStr.toString())
            .setParameter("key", userId).list();
}


    public int deleteOrders(List<Long> orderIds){
      final String deleteOrder = "delete from Order o where o.OrderId in (:orderIds)";
      final Query hibernateQuery = getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery(deleteOrder);
      hibernateQuery.setParameterList("orderIds", orderIds);
      int count = hibernateQuery.executeUpdate();   
      return count;
     }    

I'm getting an java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Long Exception while executing this step int count = hibernateQuery.executeUpdate();

該代碼有什么問題以及如何擺脫該異常

要獲取 BigDecimal object 的長值,您可以對其調用 .longValue() 方法。

我猜orderDAO.getOrderIdByUserId(userId)返回BigDecimal的列表,而不是Long的列表。 如果沒有該方法的代碼,很難判斷。


編輯(現在代碼已經存在):考慮到https://stackoverflow.com/a/5380867/1506009 ,您可以看到某些數據庫(想到 Oracle)在調用list()時返回BigDecimal (或者更確切地說List<BigDecimal>list()在 Hibernate 中。 您的 Java 代碼在使用原始List時存在錯誤,並且在確實是另一種類型時只是假設某種類型。

getOrderIdByUserId()可以返回List<? extends Number> List<? extends Number> ,它將匹配LongBigDecimal 或者如果這是真的,它可以返回List<BigDecimal> 不使用原始類型!

setParameterList()允許第三個參數,列表元素的類型。 用那個。

而不是使用hibernateQuery.setParameterList("orderIds", orderIds); ,我已將其更新為hibernateQuery.setBigDecimal("orderIds", orderIds);

現在它工作正常。

暫無
暫無

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

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