Hibernate один-к-одному, исключений нет строки с данным идентификатором - PullRequest
14 голосов
/ 12 января 2012

Мне нужна связь между двумя объектами, поэтому я использую один-к-одному

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

Если в таблице T_USER нет элемента для конкретного ЛИЦА, user.getPerson создает исключение:

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

Но если у меня есть ссылка между двумя таблицами в БД, геттер работает!

1 Ответ

30 голосов
/ 12 января 2012

Не могу сказать, является ли это лучшим решением, но вы можете использовать аннотацию @NotFound. Э.Г.

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

Я верю, что человек останется null, и исключение не будет брошено.

...