Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/05/2012, 09:48
Avatar de Fuzzylog
Fuzzylog
 
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 3 meses
Puntos: 188
Respuesta: Problema con Spring Transactions e Hibernate

1º La transaccionalidad la implementas en el manager que llama a los daos
2º Mejor usando anotaciones
3º Para el rollback, por defecto sólo responde a RuntimeExcepcion, así que para que incluya otras tendrás que añadir la anotación @Transactional(rollbackFor = Exception.class)
// Dentro de @Transactional puedes añadir el tipo de propagación, etc...
4º En tu caso veo que llamas al método save y el primero te lo guarda bien. Hasta donde sé, por el tipo de acceso que tienes, permite leer la tabla antes de realizar el primer insert, y al insertar tienes que hacer una lectura previa del maxId de la tabla para saber cual es el siguiente id primario que debe insertar. Yo le crearia un metodo getNextId() para obtener el idMax+1, y tendria ese elemento en una variable que setearia al objeto que deseo insertar. Pasado el insert del bucle for aumentaría ese nextId en 1 unidad .

Algo tal que así:

public void savePersonas(final List<Persona> personas) {
Integer nextId = null;
for (final Persona persona : personas) {
if (nextId == null) {
nextId = getNextId();
}
persona.setIdPersona(nextId);
this.save(persona);
nextId++;
}
}

Espero que haya aclarado tus dudas
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}