通过@OneToOne和FetchType.EAGER与Hibernate保持联接

时间:2012-11-06 13:18:25

标签: hibernate repository left-join one-to-one

我有一个带有@OneToOne的两个表。 因此,如果第二个id引用表中不存在的行 我可以对Hibernate说这一行吗? 相反,我有一个错误。

@Entity
@Table(name="user")
public class User implements Serializable {

private Long idUser;
private Area area;

//...other get and setter

@OneToOne(fetch=FetchType.EAGER)
@JoinColumn(name="idarea")
public Area getArea() {
return area;
}
}

现在,如果我有一行不存在idarea的用户,我该如何跳过该用户, 或者我可以进行LEFT JOIN吗?

1 个答案:

答案 0 :(得分:4)

这种情况不应该在具有外键约束的定义良好的模式中发生。如果用户具有非空idarea,则此ID应引用Area表中的现有ID。我会修改数据,并添加一个外键约束,以确保永远不会发生这种情况。

如果出于非常好的理由,这是不可能的,那么您可以使用@NotFound(NotFoundAction.IGNORE)注释。但它会产生性能成本,因为每次加载用户时,Hibernate都必须检查ID是真实ID还是不存在的ID。