如何使用Hibernate查看商品是否在购物车中?

时间:2014-03-13 00:03:05

标签: hibernate hibernate-mapping

我有一个功能来验证购物车中是否存在商品。我当前的代码以这种方式工作,如果代码返回异常,则意味着购物车中不存在该项。

问题在于,如果当前代码返回任何类型的异常,我将其作为项目不在列表中。

如果项目不在购物车中,我如何更改代码?

  Criteria cre = session.createCriteria(Cart.class, "cart")
                        .createAlias("cart.items", "items")
                        .createAlias("items.pro", "pro");
                cre.add(Restrictions.eq("cart.id", cartId));
                cre.add(Restrictions.eq("pro.id", proId));
                Cart cart = (Cart) cre.list().get(0);
                if (!tx.wasCommitted()) {
                    tx.commit();
                }
                if (session.isOpen()) {
                    session.close();
                }
                if (cart.getItems().size() >= 1) {
                    System.err.println("Item is in the cart");
                    return 1;
                }
            } catch (Exception e) {
                System.err.println("either item is not in the cart or an exception was thrown");
                return 2;     
            }

1 个答案:

答案 0 :(得分:1)

    Criteria cre = session.createCriteria(Cart.class, "cart")
        .createAlias("cart.items", "items")
        .createAlias("items.pro", "pro");
        cre.add(Restrictions.eq("cart.id", cartId));
        cre.add(Restrictions.eq("pro.id", proId));
    List<Cart> carts = cre.list();
    if (carts.size() == 0)
        return 2; //ItemReteieveStatus.NOT_FOUND;

    Cart cart = carts.get(0);
    if (!tx.wasCommitted()) {
        tx.commit();
    }
    if (session.isOpen()) {
        session.close();
    }
    if (cart.getItems().size() >= 1) {
        System.err.println("Item is in the cart");
        return 1;//ItemReteieveStatus.FOUND;
    }
    return 2;//ItemReteieveStatus.NOT_FOUND
} catch (Exception e) {
    System.err.println("either item is not in the cart or an exception was thrown");
    return 3;//ItemReteieveStatus.ERROR;     
}

返回整数并不是一个好习惯。你最好添加一个枚举,如:

public enum ItemReteieveStatus {
    FOUND, NOT_FOUNT, ERROR;
}