public void edit(Usuario usuario) throws NonexistentEntityException, Exception { EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin(); Usuario persistentUsuario = em.find(Usuario.class, usuario.getIdUsuario()); Collection<Detalle> detalleCollectionOld = persistentUsuario.getDetalleCollection(); Collection<Detalle> detalleCollectionNew = usuario.getDetalleCollection(); Collection<Detalle> attachedDetalleCollectionNew = new ArrayList<Detalle>(); for (Detalle detalleCollectionNewDetalleToAttach : detalleCollectionNew) { detalleCollectionNewDetalleToAttach = em.getReference( detalleCollectionNewDetalleToAttach.getClass(), detalleCollectionNewDetalleToAttach.getIdDetalle()); attachedDetalleCollectionNew.add(detalleCollectionNewDetalleToAttach); } detalleCollectionNew = attachedDetalleCollectionNew; usuario.setDetalleCollection(detalleCollectionNew); usuario = em.merge(usuario); for (Detalle detalleCollectionOldDetalle : detalleCollectionOld) { if (!detalleCollectionNew.contains(detalleCollectionOldDetalle)) { detalleCollectionOldDetalle.setIdUsuario(null); detalleCollectionOldDetalle = em.merge(detalleCollectionOldDetalle); } } for (Detalle detalleCollectionNewDetalle : detalleCollectionNew) { if (!detalleCollectionOld.contains(detalleCollectionNewDetalle)) { Usuario oldIdUsuarioOfDetalleCollectionNewDetalle = detalleCollectionNewDetalle.getIdUsuario(); detalleCollectionNewDetalle.setIdUsuario(usuario); detalleCollectionNewDetalle = em.merge(detalleCollectionNewDetalle); if (oldIdUsuarioOfDetalleCollectionNewDetalle != null && !oldIdUsuarioOfDetalleCollectionNewDetalle.equals(usuario)) { oldIdUsuarioOfDetalleCollectionNewDetalle .getDetalleCollection() .remove(detalleCollectionNewDetalle); oldIdUsuarioOfDetalleCollectionNewDetalle = em.merge(oldIdUsuarioOfDetalleCollectionNewDetalle); } } } em.getTransaction().commit(); } catch (Exception ex) { String msg = ex.getLocalizedMessage(); if (msg == null || msg.length() == 0) { Integer id = usuario.getIdUsuario(); if (findUsuario(id) == null) { throw new NonexistentEntityException("The usuario with id " + id + " no longer exists."); } } throw ex; } finally { if (em != null) { em.close(); } } }
public void create(Usuario usuario) { if (usuario.getDetalleCollection() == null) { usuario.setDetalleCollection(new ArrayList<Detalle>()); } EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin(); Collection<Detalle> attachedDetalleCollection = new ArrayList<Detalle>(); for (Detalle detalleCollectionDetalleToAttach : usuario.getDetalleCollection()) { detalleCollectionDetalleToAttach = em.getReference( detalleCollectionDetalleToAttach.getClass(), detalleCollectionDetalleToAttach.getIdDetalle()); attachedDetalleCollection.add(detalleCollectionDetalleToAttach); } usuario.setDetalleCollection(attachedDetalleCollection); em.persist(usuario); for (Detalle detalleCollectionDetalle : usuario.getDetalleCollection()) { Usuario oldIdUsuarioOfDetalleCollectionDetalle = detalleCollectionDetalle.getIdUsuario(); detalleCollectionDetalle.setIdUsuario(usuario); detalleCollectionDetalle = em.merge(detalleCollectionDetalle); if (oldIdUsuarioOfDetalleCollectionDetalle != null) { oldIdUsuarioOfDetalleCollectionDetalle .getDetalleCollection() .remove(detalleCollectionDetalle); oldIdUsuarioOfDetalleCollectionDetalle = em.merge(oldIdUsuarioOfDetalleCollectionDetalle); } } em.getTransaction().commit(); } finally { if (em != null) { em.close(); } } }