Ver Mensaje Individual
  #4 (permalink)  
Antiguo 23/02/2012, 15:39
jav_000
 
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 185
Antigüedad: 12 años, 8 meses
Puntos: 29
Respuesta: Problema con JPA

Código PHP:
public static void main(String[] args) {
        
PersonaJpaController controlador = new PersonaJpaController();
        
Persona unaPersona = new Persona("Pepito","Perez","12345678");
        
unaPersona.comprarAuto("Ford""Focus""ASD-123");
        
controlador.create(unaPersona);
    } 
Viendo el mensaje de error que te da (PK en un objeto), creo que lo que puede estar pasando es que tu creas tu objeto de la clase Persona. Hasta que no hagas commit(), no se asigna su PK, al ser esta auto asignada, por lo que al intentar relacionar tu objeto de la clase Auto con tu objeto de la clase Persona, se encuentra con una PK=null.

Puedes forzar a que se genere, si no recuerdo mal con flush():
http://docs.oracle.com/javaee/5/api/...er.html#flush()

En tu clase Persona puedes tener éste método para comprar un auto.

Código PHP:
public void comprarAuto(Auto a){
    
listaAutos.add(a);
    
//Ahora necesitamos que el Auto sepa quien es su dueño, creando una relación
    
a.setPersonaPropietaria(this);

Esta última línea se ha hecho porque estás usando una relación bidireccional, o sea, una Persona tiene muchos Autos, y un Auto pertenece a una Persona, así que cada vez que añadas o borres un Auto de una Persona, tienes que crear o eliminar la relación con Persona.

No es muy normal el crear un Auto para añadirlo. Si estamos en una web, tu estás viendo una lista de Auto's, y tu eliges el que quieres comprar, pero el objeto Auto ya está guardado en la bd previamente.

Ten cuidado también con constructores como este:

Código PHP:
 public Persona(Integer id) {
        
this.id id;
    } 
, ya que tu PK se genera automáticamente. Puede darte problemas si le das tú el id.

Aquí tienes un tutorial muy bueno para aprender JPA:
http://schuchert.wikispaces.com/JPA+...etting+Started

Un saludo.