public void create(Tipo tipo) { if (tipo.getInstitucionCollection() == null) { tipo.setInstitucionCollection(new ArrayList<Institucion>()); } EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin(); Collection<Institucion> attachedInstitucionCollection = new ArrayList<Institucion>(); for (Institucion institucionCollectionInstitucionToAttach : tipo.getInstitucionCollection()) { institucionCollectionInstitucionToAttach = em.getReference( institucionCollectionInstitucionToAttach.getClass(), institucionCollectionInstitucionToAttach.getId()); attachedInstitucionCollection.add(institucionCollectionInstitucionToAttach); } tipo.setInstitucionCollection(attachedInstitucionCollection); em.persist(tipo); for (Institucion institucionCollectionInstitucion : tipo.getInstitucionCollection()) { Tipo oldTipoIdOfInstitucionCollectionInstitucion = institucionCollectionInstitucion.getTipoId(); institucionCollectionInstitucion.setTipoId(tipo); institucionCollectionInstitucion = em.merge(institucionCollectionInstitucion); if (oldTipoIdOfInstitucionCollectionInstitucion != null) { oldTipoIdOfInstitucionCollectionInstitucion .getInstitucionCollection() .remove(institucionCollectionInstitucion); oldTipoIdOfInstitucionCollectionInstitucion = em.merge(oldTipoIdOfInstitucionCollectionInstitucion); } } em.getTransaction().commit(); } finally { if (em != null) { em.close(); } } }
public void edit(Tipo tipo) throws IllegalOrphanException, NonexistentEntityException, Exception { EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin(); Tipo persistentTipo = em.find(Tipo.class, tipo.getId()); Collection<Institucion> institucionCollectionOld = persistentTipo.getInstitucionCollection(); Collection<Institucion> institucionCollectionNew = tipo.getInstitucionCollection(); List<String> illegalOrphanMessages = null; for (Institucion institucionCollectionOldInstitucion : institucionCollectionOld) { if (!institucionCollectionNew.contains(institucionCollectionOldInstitucion)) { if (illegalOrphanMessages == null) { illegalOrphanMessages = new ArrayList<String>(); } illegalOrphanMessages.add( "You must retain Institucion " + institucionCollectionOldInstitucion + " since its tipoId field is not nullable."); } } if (illegalOrphanMessages != null) { throw new IllegalOrphanException(illegalOrphanMessages); } Collection<Institucion> attachedInstitucionCollectionNew = new ArrayList<Institucion>(); for (Institucion institucionCollectionNewInstitucionToAttach : institucionCollectionNew) { institucionCollectionNewInstitucionToAttach = em.getReference( institucionCollectionNewInstitucionToAttach.getClass(), institucionCollectionNewInstitucionToAttach.getId()); attachedInstitucionCollectionNew.add(institucionCollectionNewInstitucionToAttach); } institucionCollectionNew = attachedInstitucionCollectionNew; tipo.setInstitucionCollection(institucionCollectionNew); tipo = em.merge(tipo); for (Institucion institucionCollectionNewInstitucion : institucionCollectionNew) { if (!institucionCollectionOld.contains(institucionCollectionNewInstitucion)) { Tipo oldTipoIdOfInstitucionCollectionNewInstitucion = institucionCollectionNewInstitucion.getTipoId(); institucionCollectionNewInstitucion.setTipoId(tipo); institucionCollectionNewInstitucion = em.merge(institucionCollectionNewInstitucion); if (oldTipoIdOfInstitucionCollectionNewInstitucion != null && !oldTipoIdOfInstitucionCollectionNewInstitucion.equals(tipo)) { oldTipoIdOfInstitucionCollectionNewInstitucion .getInstitucionCollection() .remove(institucionCollectionNewInstitucion); oldTipoIdOfInstitucionCollectionNewInstitucion = em.merge(oldTipoIdOfInstitucionCollectionNewInstitucion); } } } em.getTransaction().commit(); } catch (Exception ex) { String msg = ex.getLocalizedMessage(); if (msg == null || msg.length() == 0) { Integer id = tipo.getId(); if (findTipo(id) == null) { throw new NonexistentEntityException("The tipo with id " + id + " no longer exists."); } } throw ex; } finally { if (em != null) { em.close(); } } }