Tema: Problema JPA
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/12/2007, 05:24
AlexCollado
 
Fecha de Ingreso: septiembre-2007
Mensajes: 56
Antigüedad: 16 años, 8 meses
Puntos: 0
Problema JPA

Hola a todos.

He escrito en el foro de J2EE, pero no encontre una solución para el problema y me remitieron aquí o a algun foro de TopLink... este es el primero en google, y a ver si aquí me podeis echar una mano o sino, decirme algún otro sitio que conozcais q sea una buena referencia para poder preguntar...

Os explico un poco el problema.

Estoy haciendo una aplicacion web, en la que trabajo con Struts, java 6, MySql y la implementacion de TopLink para JPA. El problema es cuanto menos curioso. Intentare ser conciso y explicito;

Se manejan básicamente 2 entidades, Inmueble y Piso (clase Hija de Inmueble, por tanto con relacion 1..1). Pues bien, tb se manejan 2 metodos esencialmente; insertar un piso y borrar un piso.

El insertar funciona correctamente (eso creo y espero jeje), ya que se puede insertar 1 piso o los que se quieran sin que nunca de ningun problema. Para insertar un piso, se hacen 2 save en la BBDD, uno para el piso y otro para el inmueble, al que le introduzco el piso en su interior.

El borrar... pues supongo que debe ser en el que algo vaya mal, pero la cuestion es que "funciona". Se hace un unico delete(), el del inmueble, ya que por la relacion de borrado en cascada que tengo en la BBDD, el piso tb se borra (esto funciona o al menos en la BBDD desaparecen ambos registros).

El problema es que al insertar N pisos, luego borrar uno cualquiera (hasta aqui todo "bien", es decir, tendremos N-1 pisos en la BBDD habiendose eliminado el inmueble y el piso que pretendiamos) y al volver a añadir un piso, salta esta excepcion:

"During synchronization a new object was found through a relationship that was not marked cascade PERSIST"

He hecho varias pruebas... poner el delete del piso en el borrar ademas del inmueble (siempre antes que el delete del inmueble, claro) y bueno, tb he hecho el proceso de insertar N pisos, borrar 1, parar el servidor de aplicaciones y la BBDD, volver a levantar todo, ver que verdaderamente en la BBDD tenía N-1 pisos y eran los correctos, insertar un piso y eso SÍ que funciona... es decir, q se debe quedar algo por ahí suelto o algo...

En fin, la verdad es que no se qué hago mal, y es por esto por lo que me remito a vosotros, a ver si me podeis echar una mano. Si quereis que os mande el codigo del insertar y el borrar decirmelo y os lo mando.

Muchisimas gracias, un saludo y felices fiestas.