public void create(Factura factura) { if (factura.getGastoList() == null) { factura.setGastoList(new ArrayList<Gasto>()); } EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin(); Proveedor idproveedor = factura.getIdproveedor(); if (idproveedor != null) { idproveedor = em.getReference(idproveedor.getClass(), idproveedor.getIdproveedor()); factura.setIdproveedor(idproveedor); } Usuario idusuario = factura.getIdusuario(); if (idusuario != null) { idusuario = em.getReference(idusuario.getClass(), idusuario.getIdusuario()); factura.setIdusuario(idusuario); } List<Gasto> attachedGastoList = new ArrayList<Gasto>(); for (Gasto gastoListGastoToAttach : factura.getGastoList()) { gastoListGastoToAttach = em.getReference(gastoListGastoToAttach.getClass(), gastoListGastoToAttach.getIdgasto()); attachedGastoList.add(gastoListGastoToAttach); } factura.setGastoList(attachedGastoList); em.persist(factura); if (idproveedor != null) { idproveedor.getFacturaList().add(factura); idproveedor = em.merge(idproveedor); } if (idusuario != null) { idusuario.getFacturaList().add(factura); idusuario = em.merge(idusuario); } for (Gasto gastoListGasto : factura.getGastoList()) { Factura oldIdfacturaOfGastoListGasto = gastoListGasto.getIdfactura(); gastoListGasto.setIdfactura(factura); gastoListGasto = em.merge(gastoListGasto); if (oldIdfacturaOfGastoListGasto != null) { oldIdfacturaOfGastoListGasto.getGastoList().remove(gastoListGasto); oldIdfacturaOfGastoListGasto = em.merge(oldIdfacturaOfGastoListGasto); } } em.getTransaction().commit(); } finally { if (em != null) { em.close(); } } }
public void edit(Factura factura) throws IllegalOrphanException, NonexistentEntityException, Exception { EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin(); Factura persistentFactura = em.find(Factura.class, factura.getIdfactura()); Proveedor idproveedorOld = persistentFactura.getIdproveedor(); Proveedor idproveedorNew = factura.getIdproveedor(); Usuario idusuarioOld = persistentFactura.getIdusuario(); Usuario idusuarioNew = factura.getIdusuario(); List<Gasto> gastoListOld = persistentFactura.getGastoList(); List<Gasto> gastoListNew = factura.getGastoList(); List<String> illegalOrphanMessages = null; for (Gasto gastoListOldGasto : gastoListOld) { if (!gastoListNew.contains(gastoListOldGasto)) { if (illegalOrphanMessages == null) { illegalOrphanMessages = new ArrayList<String>(); } illegalOrphanMessages.add( "You must retain Gasto " + gastoListOldGasto + " since its idfactura field is not nullable."); } } if (illegalOrphanMessages != null) { throw new IllegalOrphanException(illegalOrphanMessages); } if (idproveedorNew != null) { idproveedorNew = em.getReference(idproveedorNew.getClass(), idproveedorNew.getIdproveedor()); factura.setIdproveedor(idproveedorNew); } if (idusuarioNew != null) { idusuarioNew = em.getReference(idusuarioNew.getClass(), idusuarioNew.getIdusuario()); factura.setIdusuario(idusuarioNew); } List<Gasto> attachedGastoListNew = new ArrayList<Gasto>(); for (Gasto gastoListNewGastoToAttach : gastoListNew) { gastoListNewGastoToAttach = em.getReference( gastoListNewGastoToAttach.getClass(), gastoListNewGastoToAttach.getIdgasto()); attachedGastoListNew.add(gastoListNewGastoToAttach); } gastoListNew = attachedGastoListNew; factura.setGastoList(gastoListNew); factura = em.merge(factura); if (idproveedorOld != null && !idproveedorOld.equals(idproveedorNew)) { idproveedorOld.getFacturaList().remove(factura); idproveedorOld = em.merge(idproveedorOld); } if (idproveedorNew != null && !idproveedorNew.equals(idproveedorOld)) { idproveedorNew.getFacturaList().add(factura); idproveedorNew = em.merge(idproveedorNew); } if (idusuarioOld != null && !idusuarioOld.equals(idusuarioNew)) { idusuarioOld.getFacturaList().remove(factura); idusuarioOld = em.merge(idusuarioOld); } if (idusuarioNew != null && !idusuarioNew.equals(idusuarioOld)) { idusuarioNew.getFacturaList().add(factura); idusuarioNew = em.merge(idusuarioNew); } for (Gasto gastoListNewGasto : gastoListNew) { if (!gastoListOld.contains(gastoListNewGasto)) { Factura oldIdfacturaOfGastoListNewGasto = gastoListNewGasto.getIdfactura(); gastoListNewGasto.setIdfactura(factura); gastoListNewGasto = em.merge(gastoListNewGasto); if (oldIdfacturaOfGastoListNewGasto != null && !oldIdfacturaOfGastoListNewGasto.equals(factura)) { oldIdfacturaOfGastoListNewGasto.getGastoList().remove(gastoListNewGasto); oldIdfacturaOfGastoListNewGasto = em.merge(oldIdfacturaOfGastoListNewGasto); } } } em.getTransaction().commit(); } catch (Exception ex) { String msg = ex.getLocalizedMessage(); if (msg == null || msg.length() == 0) { Integer id = factura.getIdfactura(); if (findFactura(id) == null) { throw new NonexistentEntityException("The factura with id " + id + " no longer exists."); } } throw ex; } finally { if (em != null) { em.close(); } } }