Mi aplicación la estoy haciendo con Spring 3.0.0 e Hibernate 3.2. En todo los casos guarda, recupera y elimina perfectamente, pero en ete método donde tengo que guardar reiteradas veces se me cuelga la ejecución. Si lo debugueo me queda en ese línea de ejecucion (el save) y me desaparecen los valores de las variables en ejecucion. He probado capturar excepcion, pero no me devuelve ningun tipo de excepcion.
La verdad que no se qué más probar.
Les dejo el método que guarda:
Código:
Y el método desde donde lo llamo: @Transactional public void guardar(T objeto) throws DataAccessException { try { getHibernateTemplate().saveOrUpdate(objeto); } catch (Exception e) { System.err.println(e.getCause()); e.printStackTrace(); System.err.println(e.getMessage()); } }
Código:
@Override @Transactional public void generarFixture(Categoria c) throws MensajeDeExcepcion { if (fSrv.getFechasDeCategoria(c.getIdCategoria()) != null) { List<Partido> todosLosPartidos = new ArrayList<Partido>(); List<Equipo> equipos = this.getEquipos(c); Random r = new Random(System.currentTimeMillis()); Collections.shuffle(equipos, r); List<Equipo> equiposLocales = new ArrayList<Equipo>(equipos); List<Equipo> equiposVisitantes = new ArrayList<Equipo>(equipos); final int CANT_EQUIPOS = equiposLocales.size(); final Equipo ultimo = equiposLocales.remove(CANT_EQUIPOS - 1); equiposVisitantes.remove(CANT_EQUIPOS - 1); for (int fila = 0; fila < CANT_EQUIPOS - 1; fila++) { Fecha f = new Fecha(); f.setCategoria(c); f.setNumeroFecha(fila + 1); f.setPartidos(new ArrayList<Partido>()); Estado estado = eSrv.getEstadoByNombreAndObjeto("Activo", "Partido"); logger.info("*****"); logger.info("Fecha " + (fila + 1)); fSrv.guardarFecha(f); for (int col = 0; col < CANT_EQUIPOS / 2; col++) { Equipo eqVisitante; Equipo eqLocal; if (col == 0) { if (fila % 2 == 0) { eqVisitante = equiposLocales.remove(0); eqLocal = ultimo; equiposLocales.add(eqVisitante); } else { eqLocal = equiposLocales.remove(0); eqVisitante = ultimo; equiposLocales.add(eqLocal); } } else { eqLocal = equiposLocales.remove(0); eqVisitante = equiposVisitantes.remove(equiposVisitantes.size() - 1); equiposLocales.add(eqLocal); equiposVisitantes.add(0, eqVisitante); } Partido p = new Partido(); p.setFecha(f); p.setEquipoLocal(eqLocal); p.setEquipoVisitante(eqVisitante); p.setCategoria(c); p.setEstado(estado); logger.info("Partido " + (col + 1) + " " + eqLocal.getNombre() + " vs " + eqVisitante.getNombre()); pSrv.guardar(p); } } pSrv.guardar(todosLosPartidos); } else { throw new MensajeDeExcepcion("La categoria ya tiene fechas"); } }
Al momento de guardar (antes de que se "cuelgue") el hibernateTemplate en el debug tiene estos valores:
Código HTML:
hibernateTemplate HibernateTemplate (id=113) allowCreate true alwaysUseNewSession false beanFactory null cacheQueries false checkWriteOperations true defaultJdbcExceptionTranslator null entityInterceptor null exposeNativeSession false fetchSize 0 filterNames null flushMode 1 jdbcExceptionTranslator null logger Log4JLogger (id=121) maxResults 0 queryCacheRegion null sessionFactory SessionFactoryImpl (id=122)
Me olvidaba de comentar, el método save que puse anteriormente lo uso tanto para fecha como para partido. Los DAO's de cada uno lo utilizan, ya que es genérico.