2012-01-12 14 views
14

Ben iki taraf arasında bir bağlantı gerekir var, bu yüzden bir özellikle bir hayır kalem bire birhazırda bire-bir, belirli bir tanımlayıcı ile hiçbir satır istisna

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

varsa kullanmak

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

Ama db, alıcı çalışmalarında 2 tablolar arasında başvuru varsa: tablo T_USER içinde KİŞİ, user.getPerson bir istisna!

+2

Sorunuz nedir? – mcfinnigan

+0

Kullanıcı için tablo kişisinde referans yoksa user.getPerson öğesini çağırdığımda bir istisna olmak istemiyorum. User.getPerson'ın null olmadığını kontrol etmem gerekiyor user.getPerson(). GetPin(). – BasicCoder

+0

no bir okuma, seçin. – BasicCoder

cevap

29

Bunun en iyi çözüm olup olmadığını söyleyemiyorum, ancak @NotFound ek açıklamasını kullanabilirsiniz. Örneğin.

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

Ben kişi null kalacaktır inanıyoruz ve özel durum olmayacaktır.

+0

wouaw, teşekkürler, hiç bir zaman ek açıklamalar görmedim. İşe yarıyor! Şimdi, en iyi çözümü ...? Normal olarak, birincil anahtarda bire bir kullanımı daha iyi biliyorum, ancak bu durumda @NotFound ek açıklaması ile başka bir yol kullanacağım. – BasicCoder

İlgili konular