我有两张表,比如说Person 和 Person_info。两个表都有共享的 PK person_id,它也用作外键。情况是,可能存在不存在 Person_info 的 Person。Person_info 对于 person 是可选的,不需要存在具有相同 person_id 的行。当我想搜索休眠的人时,例如:
Criteria criteria = session.createCriteria(Person.class);
criteria.add(Restrictions.eq("name", name));
Object obj = criteria.uniqueResult();
我得到一个例外:
[<package>.PersonInfo#338664] org.hibernate.ObjectNotFoundException: No row with the given identifier exists: <package>.PersonInfo#338664]
当然,具有 person_id=338664 的 Person_info 行确实不存在。但我仍然希望 hibernate 能够处理这个问题。如果该行存在,那么我想加载它,如果它不存在,我想获取 null,而不是异常。
我正在使用休眠版本 3.5.6-Final。我认为这个线程是完全相同的问题,但它没有解决方案@PrimaryKeyJoinColumn 与双向@OneToOne 关系
感谢您的帮助。
带注释的类如下所示:
人物类:
@Entity
@Table(name="Person")
public class Person extends BaseDBEntity<Integer>{
private PersonInfo personInfo;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="person_id")
public Integer getId() {
return id;
}
@OneToOne(cascade = CascadeType.ALL, optional = true)
@PrimaryKeyJoinColumn
public PersonInfo getPersonInfo() {
return personInfo;
}
}
个人信息类:
@Entity
@Table(name="Person_info")
public class PersonInfo extends BaseDBEntity<Integer> {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="person_id")
public Integer getId() {
return id;
}
}
它们都继承自 BaseDBEntity:
public abstract class BaseDbEntity<T> implements Serializable {
private static final long serialVersionUID = 1L;
protected T id;
}