I have this block of code in OrderService.java
public void deleteOrderByUserId(int userId){
List<Long> orderIds = orderDAO.getOrderIdByUserId(userId);
int deleteOrders = orderDAO.deleteOrders(orderIds);
}
This is the code in orderDAO.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();
What's wrong with that code and how to get rid of that exception
To get the long value of a BigDecimal object you can call the .longValue() method on it.
orderDAO.getOrderIdByUserId(userId) returns a list of BigDecimal, not of Long, I would guess. It’s hard to tell without the code for that method.
EDIT (now that the code is there): Considering https://stackoverflow.com/a/5380867/1506009, you can see that some databases (Oracle comes to mind) return BigDecimal (or rather List<BigDecimal>) when calling list() in Hibernate. Your Java code is faulty in using a raw List and just assuming some type when it is indeed another.
getOrderIdByUserId() could return List<? extends Number>, which would match both Long and BigDecimal; or it could return List<BigDecimal> if that’s the truth. To not use raw types!
setParameterList() allows a third parameter, the type of the list elements. Use that.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With