@Transactional( propagation = Propagation.REQUIRES_NEW, readOnly = false, rollbackFor = Throwable.class) public boolean saveOrUpdate(Incidencia p) { if (p == null) return false; Incidencia entity = null; try { Session currentSession = getSession(); if (p.getId() != null && this.get(p.getId()) != null) entity = get(p.getId()); if (entity == null) entity = p; else { if (p.getCategoria() != null) try { entity.setCategoria( (CategoriaIncidencia) super.getSession().get(CategoriaIncidencia.class, p.getCategoria().getId())); } catch (Throwable t) { log.error("Categoria desconocida", t); } else entity.setCategoria(null); if (p.getCreador() != null) entity.setCreador(UsuarioConsultas.find(p.getCreador().getNombreUsuario())); else entity.setCreador(null); entity.setDescripcion(p.getDescripcion()); if (p.getEstado() != null) try { entity.setEstado( (EstadoIncidencia) super.getSession().get(EstadoIncidencia.class, p.getEstado().getId())); } catch (Throwable t) { log.error("Estado desconocido", t); } else entity.setEstado(null); entity.setFechaCierre(p.getFechaCierre()); entity.setFechaCreacion(p.getFechaCreacion()); entity.setGeometria(p.getGeometria()); entity.setPrioridad(p.getPrioridad()); entity.setTitulo(p.getTitulo()); } currentSession.saveOrUpdate(entity); } catch (Throwable t) { log.error("Error al guardar una incidencia: " + p, t); return false; } return true; }
/** * Actualiza los estados de las incidencias que NO se encuentren en el array y cuyo estado no es * ya el pasado como parĂ¡metro. * * @param idsIncidencias Array de ids de incidencias * @param estado Estado a establecer */ @Transactional( propagation = Propagation.REQUIRES_NEW, readOnly = false, rollbackFor = Throwable.class) public void updateEstadosIncidencias(Long[] idsIncidencias, String estado) { if (idsIncidencias != null && idsIncidencias.length > 0) { EstadoIncidencia estadoObj = getEstadoIncidenciaByIdentificador(estado); if (estado != null) { Criteria crit = getSession() .createCriteria(Incidencia.class) .add(Restrictions.not(Restrictions.in("id", idsIncidencias))) .add(Restrictions.ne("estado", estadoObj)); List<Incidencia> resultado = crit.list(); for (Incidencia inc : resultado) { if (log.isTraceEnabled()) { log.trace("Actualizamos el estado de la incidencia " + inc.getId() + " a " + estado); } inc.setEstado(estadoObj); getSession().update(inc); } } else { log.error("El estado " + estado + " no se encuentra en la base de datos"); } } }