コード例 #1
0
  @Override
  public void addProductosCarrito(String username, int idproducto) {

    session = sessionFactory.openSession();
    Transaction transaction = null;
    try {

      transaction = session.beginTransaction();

      Usuario usuario = (Usuario) session.get(Usuario.class, username);
      Producto producto = (Producto) session.get(Producto.class, idproducto);

      Pedido p = getPedidoCarritoSinSession(username);

      Pedido pedido = new Pedido();
      LineaPedido lineapedido = new LineaPedido();
      lineapedido.setCantidad(1);
      lineapedido.setPrecio(producto.getPrecio());

      // Si no se ha creado el carrito lo creamos
      if (p == null) {
        producto.addLineaPedido(lineapedido);
        pedido.addLineaPedido(lineapedido);
        pedido.setConfirmado(false);
        usuario.addPedido(pedido);
        session.save(usuario);
        session.save(producto);
        session.save(pedido);
        session.save(lineapedido);
      } else {

        List<LineaPedido> lp =
            session
                .createCriteria(LineaPedido.class)
                .add(Restrictions.eq("pedido", p))
                .add(Restrictions.eq("producto", producto))
                .list();

        // Si se quiere añadir al carrito un producto del que aún no hay ninguna unidad, se añade
        if (lp.size() == 0) {
          p.addLineaPedido(lineapedido);
          producto.addLineaPedido(lineapedido);
          session.save(p);
          session.save(producto);
          session.save(lineapedido);
          // Si ya hay unidades del producto, se suma una unidad del producto a la tabla
          // LineaPedidos
        } else {
          lp.get(0).setCantidad(lp.get(0).getCantidad() + 1);
          session.save(lp.get(0));
        }
      }

      // Actualizamos la tabla productos
      producto.setCantidad(producto.getCantidad() - 1);
      session.save(producto);

      transaction.commit();

    } catch (HibernateException e) {

      transaction.rollback();
      e.printStackTrace();
    } finally {
      session.close();
    }
  }