我需要两个实体之间的链接,所以我使用一对一

@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中没有用于PERSON的项目,则user.getPerson会引发异常:
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [packagename.com.entity.Person#scabriou]

但是,如果我在数据库的2个表之间有引用,则getter可以正常工作!

最佳答案

我不能说这是否是最好的解决方案,但您可以使用@NotFound批注。例如。

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

我相信这个人会保留null,不会抛出异常。

关于java - 一对一 hibernate ,没有给定标识符的行存在异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8839323/

10-11 22:23
查看更多