2012-01-12 8 views
14

necesito una relación entre dos entidades, por lo que utilizar un uno-a-unoHibernate uno-a-uno, no fila con el identificador dado existe una excepción

@Entity 
@Table(name = "T_USER") 
public class User implements Serializable { 

    @Id 
    @Column(name = "user_id") 
    private int userId; 

    @Column(name = "login") 
    private String login; 

    @OneToOne(optional = true)  
    @JoinColumn(name="login", referencedColumnName="person_id", nullable = true, insertable = false, updatable = false) 
    private Person person; 
} 

@Entity 
@Table(name = "T_PERSON") 
public class Person implements Serializable { 
    @Id 
    @Column(name = "person_id") 
    private String personId; 

    @Column(name = "pin") 
    private String pin; 
} 

si no hay un artículo para un particularmente Persona en T_USER mesa, user.getPerson lanzar una excepción:

org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [packagename.com.entity.Person#scabriou] 

pero si tengo referencia entre las 2 mesas en el PP, las obras getter!

+2

¿Cuál es, precisamente, su pregunta? – mcfinnigan

+0

No deseo tener una excepción cuando llamo user.getPerson si no hay referencia en la persona de la tabla para el usuario. Necesito comprobar si user.getPerson no es nulo. Quiero user.getPerson(). GetPin(). – BasicCoder

+0

no en una lectura, seleccione. – BasicCoder

Respuesta

29

No puedo decir si esta es la mejor solución, pero podría usar la anotación @NotFound. P.ej.

@NotFound(action = NotFoundAction.IGNORE) 
private Person person; 

creo persona permanecerá null y no se produce la excepción.

+0

wouaw, gracias, nunca vi esas anotaciones. ¡Funciona! Ahora, ¿es la mejor solución ...? Normalmente, sé que es mejor usar one-to-one en la clave principal, pero en este caso usaré otra forma con la anotación @NotFound. – BasicCoder

Cuestiones relacionadas