【发布时间】:2012-02-08 23:49:15
【问题描述】:
我需要两个实体之间的链接,所以我使用一对一
@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]
但如果我在 db 中的 2 个表之间有引用,则 getter 有效!
【问题讨论】:
-
您的问题究竟是什么?
-
如果用户表 person 中没有引用,我不想在调用 user.getPerson 时出现异常。我需要检查 user.getPerson 是否不为 null 我想要 user.getPerson().getPin()。
-
它是一对一的,不在主键上。
-
这不是一对一的主键。您在 T_USER 表中有一个外键(登录名),它引用了人员 ID。此列中的值是否不是现有人员 ID?
-
尝试将参数“fetch=FetchType.LAZY”添加到用户的@OneToOne 注释
标签: java hibernate exception one-to-one