我使用Hibernate时遇到了异常情况。我的网络应用程序中有一个购物车。我使用以下方法添加或更新购物车。
isItemExists(...)
- 检查购物车中是否已存在商品
addItem()
- 添加项目项目不存在或更新现有项目。
incrementCartTotal(..)
- 更新购物车总数
的addItem(..)
public void addCartItem2(CartItems item, int qty) {
Session ses = factory.openSession();
Transaction tr = ses.beginTransaction();
try {
CartItems c1 = isItemExists(item.getModel(), item.getCart());
if (c1 != null) {
Double unitPrice = sModel.getStock(item.getModel()).getUnitPrice();
Query q = ses.createQuery("UPDATE "
+ " CartItems "
+ " SET qty = qty + " + qty + " , sub_total = sub_total +" + qty * unitPrice
+ " WHERE model_ID=" + c1.getModel().getId()
+ " AND cart_ID=" + c1.getCart().getId());
q.executeUpdate();
} else {
ses.save(item);
}
tr.commit();
incrementCartTotal(item.getCart(), NumberUtilities.parseDouble(item.getSubTotal()));
} catch (HibernateException e) {
e.printStackTrace();
logger.err(e.getMessage());
} finally {
if (ses.isOpen()) {
ses.close();
}
}
}
我可以添加或更新购物车商品一次。从购物车中删除商品后,我无法将商品添加或更新到购物车。但购物车总数正在更新。提交了事务但未插入数据。
我该如何解决这个问题。
答案 0 :(得分:0)
change your query like this :
Query q = ses.createQuery("UPDATE "
+ " CartItems "
+ " SET qty = " + qty + " , sub_total = " + qty * unitPrice
+ " WHERE model_ID=" + c1.getModel().getId()
+ " AND cart_ID=" + c1.getCart().getId());
答案 1 :(得分:0)
试试这个,
不要使用addItem()
方法进行更新和保存。
isItemExists()
方法检查项目是否存在。 保存()强>
public void save(CartItems item) {
Session ses = factory.openSession();
try {
Transaction tr = ses.beginTransaction();
ses.save(item);
tr.commit();
incrementCartTotal(item.getCart(), NumberUtilities.parseDouble(item.getSubTotal()));
} catch (HibernateException e) {
// handle exception
} finally {
// close session
}
}
<强>更新()强>
public void update(CartItems item,int qty, double price) {
Session ses = factory.openSession();
Transaction tr = ses.beginTransaction();
try {
Query q = ses.createQuery("UPDATE "
+ " CartItems "
+ " SET qty = qty + "+qty+" , sub_total = sub_total +" + qty*price
+ " WHERE model_ID=" + item.getModel().getId()
+ " AND cart_ID=" + item.getCart().getId());
q.executeUpdate();
tr.commit();
} catch (HibernateException e) {
// handle exception
} finally {
// close session
}
incrementCartTotal(item.getCart(), NumberUtilities.parseDouble(item.getSubTotal()));
}
并根据您的需要使用这些
...
if(isItemExists(..)){
update();
}else{
save();
}
....
希望有所帮助!