@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(); } }