public void edit(Cliente cliente) throws NonexistentEntityException, Exception { EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin(); Cliente persistentCliente = em.find(Cliente.class, cliente.getIdCliente()); List<Venta> ventaListOld = persistentCliente.getVentaList(); List<Venta> ventaListNew = cliente.getVentaList(); List<Venta> attachedVentaListNew = new ArrayList<Venta>(); for (Venta ventaListNewVentaToAttach : ventaListNew) { ventaListNewVentaToAttach = em.getReference( ventaListNewVentaToAttach.getClass(), ventaListNewVentaToAttach.getIdVenta()); attachedVentaListNew.add(ventaListNewVentaToAttach); } ventaListNew = attachedVentaListNew; cliente.setVentaList(ventaListNew); cliente = em.merge(cliente); for (Venta ventaListOldVenta : ventaListOld) { if (!ventaListNew.contains(ventaListOldVenta)) { ventaListOldVenta.setIdCliente(null); ventaListOldVenta = em.merge(ventaListOldVenta); } } for (Venta ventaListNewVenta : ventaListNew) { if (!ventaListOld.contains(ventaListNewVenta)) { Cliente oldIdClienteOfVentaListNewVenta = ventaListNewVenta.getIdCliente(); ventaListNewVenta.setIdCliente(cliente); ventaListNewVenta = em.merge(ventaListNewVenta); if (oldIdClienteOfVentaListNewVenta != null && !oldIdClienteOfVentaListNewVenta.equals(cliente)) { oldIdClienteOfVentaListNewVenta.getVentaList().remove(ventaListNewVenta); oldIdClienteOfVentaListNewVenta = em.merge(oldIdClienteOfVentaListNewVenta); } } } em.getTransaction().commit(); } catch (Exception ex) { String msg = ex.getLocalizedMessage(); if (msg == null || msg.length() == 0) { String id = cliente.getIdCliente(); if (findCliente(id) == null) { throw new NonexistentEntityException("The cliente with id " + id + " no longer exists."); } } throw ex; } finally { if (em != null) { em.close(); } } }
public void create(Cliente cliente) throws PreexistingEntityException, Exception { if (cliente.getVentaList() == null) { cliente.setVentaList(new ArrayList<Venta>()); } EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin(); List<Venta> attachedVentaList = new ArrayList<Venta>(); for (Venta ventaListVentaToAttach : cliente.getVentaList()) { ventaListVentaToAttach = em.getReference(ventaListVentaToAttach.getClass(), ventaListVentaToAttach.getIdVenta()); attachedVentaList.add(ventaListVentaToAttach); } cliente.setVentaList(attachedVentaList); em.persist(cliente); for (Venta ventaListVenta : cliente.getVentaList()) { Cliente oldIdClienteOfVentaListVenta = ventaListVenta.getIdCliente(); ventaListVenta.setIdCliente(cliente); ventaListVenta = em.merge(ventaListVenta); if (oldIdClienteOfVentaListVenta != null) { oldIdClienteOfVentaListVenta.getVentaList().remove(ventaListVenta); oldIdClienteOfVentaListVenta = em.merge(oldIdClienteOfVentaListVenta); } } em.getTransaction().commit(); } catch (Exception ex) { if (findCliente(cliente.getIdCliente()) != null) { throw new PreexistingEntityException("Cliente " + cliente + " already exists.", ex); } throw ex; } finally { if (em != null) { em.close(); } } }