Estoy desarrollando un proyecto con Spring MVC, JPA y hibernate utilizando anotaciones.
Mi proposito es realizar un update de la clave primaria de una tabla que es clave foranea de otra. Os pongo un esquema sencillo ya que son muchos campos.
Mis tablas son:
Telefonos
idtelefono (PK)
codigo_persona(FK de codigo)
Personas
codigo(PK)
nombre
Mi idea es que al hacer un update en la tabla Personas de codigo, se actualice tambien codigo_persona en la tabla Personas. Para ello estoy utilizando merge(). Aclaro que para hacer un update del nombre en la tabla Personas no tengo ningun problema.
En el dao donde hago el merge tengo, a groso modo, esto (el codigo siguiente esta dentro de un @Transactional):
Código:
En getjpatemplate ya esta definido el entitymanager.Public void updatePersona(codigo,newcodigo,nombre){ //creo un objeto Personas con la persona que quiero modificar Personas p=this.getjpatemplate().find(Personas.class, new Long(codigo)); //setteo el codigo nuevo p.setCodigo(newcodigo); p.setNombre(nombre); this.getjpatemplate().merge(p); }
Se que una clave primaria no deberia modificarse pero no tengo opcion y tiene que ser asi.
En las entidades tengo definidos los cascadeType.All y los insertable=true y updatable=true
A ver si alguien puede echarme una mano. Si necesitais mas datos pedidmelos.
Un saludo y gracias adelantadas.