Hola comunidad, estoy teniendo un problema al guardar en una aplicación, pero no al guardar por primera vez, sino que luego de guardar (dentro de un loop o con un saveAll) unas 3 o 4 veces, el programa deja de funcionar y queda en un estado de stand by.
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:
@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());
}
}
Y el método desde donde lo llamo:
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)
edit:
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.