25/05/2012, 09:48
|
| | | 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;
} |