1

我有两个带有@OneToOne id 的表。因此,如果第二个 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 吗?

4

1 回答 1

4

这种情况不应该发生在具有外键约束的定义良好的模式中。如果用户有一个 non-null idarea,那么这个 ID 应该引用 Area 表中的一个现有 ID。我会查看数据,并添加一个外键约束以确保这永远不会发生。

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

于 2012-11-06T13:36:54.177 回答