@SuppressWarnings("unchecked") @Transactional( propagation = Propagation.REQUIRES_NEW, readOnly = false, rollbackFor = Throwable.class) private void removeRoles(Flota f) { try { if (f != null && f.getId() != null) { Session currentSession = getSession(); currentSession.clear(); f = this.get(f.getId()); final Set<Rol> roles = Collections.unmodifiableSet(f.getRoles()); if (f != null && roles != null) for (Rol r : roles) { r = (Rol) currentSession.get(Rol.class, r.getId()); if (r != null && r.getFlotas() != null) { final Set<Flota> flotas = Collections.unmodifiableSet(r.getFlotas()); List<Flota> aBorrar = new LinkedList<Flota>(); for (Flota fl : flotas) if (fl.getId().equals(f.getId())) aBorrar.add(fl); for (Flota fl : aBorrar) r.getFlotas().remove(fl); currentSession.saveOrUpdate(r); } } } } catch (Throwable t) { log.error(t, t); } }
@Transactional( propagation = Propagation.REQUIRES_NEW, readOnly = false, rollbackFor = Throwable.class) public boolean saveOrUpdate(Flota f) { boolean res = false; if (f == null) return res; try { log.debug("Saving " + f); final Set<Rol> roles = f.getRoles(); final Set<Recurso> recurso = f.getRecurso(); removeRecursos(f); removeRoles(f); Session currentSession = getSession(); currentSession.clear(); Flota entity = null; if (f.getId() != null && this.get(f.getId()) != null) entity = (Flota) currentSession.merge(f); else entity = f; if (recurso != null) for (Recurso r : recurso) { r = (Recurso) currentSession.get(Recurso.class, r.getId()); if (r != null) { r.setFlotas(entity); currentSession.saveOrUpdate(r); } } if (roles != null) for (Rol r : roles) { Rol rentity = (Rol) currentSession.get(Rol.class, r.getId()); if (rentity != null) { rentity.getFlotas().add(entity); currentSession.saveOrUpdate(rentity); } } currentSession.saveOrUpdate(entity); } catch (Throwable t) { log.error(t, t); return false; } return true; }