Hibernate:提交事务但数据未插入数据库

时间:2017-07-26 09:36:32

标签: java hibernate transactions

我使用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();
        }
    }
}

我可以添加或更新购物车商品一次。从购物车中删除商品后,我无法将商品添加或更新到购物车。但购物车总数正在更新。提交了事务但未插入数据。

我该如何解决这个问题。

2 个答案:

答案 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();
}
....

希望有所帮助!