2012-01-12 6 views
14

ho bisogno di un collegamento tra due entità, per cui uso un uno-a-unoHibernate one-to-one, No fila con l'identificatore dato esiste un'eccezione

@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; 
} 

Se non v'è alcun elemento per un particolarmente PERSONA nella tabella T_USER, user.getPerson un'eccezione:

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

ma se devo riferimento tra le 2 tabelle nel db, le opere getter!

+2

Qual è, precisamente, la tua domanda? – mcfinnigan

+0

Non voglio avere un'eccezione quando chiamo user.getPerson se non ci sono riferimenti nella persona della tabella per l'utente. Devo controllare se user.getPerson non è null Voglio user.getPerson(). GetPin(). – BasicCoder

+0

no su una lettura, selezionare. – BasicCoder

risposta

29

Non posso dire se questa sia la soluzione migliore ma è possibile utilizzare l'annotazione @NotFound. Per esempio.

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

credo persona rimarrà null e l'eccezione non saranno gettati.

+0

wouaw, grazie, non ho mai visto le annotazioni. Funziona! Ora, è la soluzione migliore ...? Normalmente, so che è meglio usare one-to-one sulla chiave primaria, ma in questo caso userò un altro modo con l'annotazione @NotFound. – BasicCoder

Problemi correlati