2012-11-06 44 views
1

我有一个id为@OneToOne的两个表。 因此,如果第二个ID引用表 的不存在的行,我可以说Hibernate跳到这一行。 相反,我有一个错误。通过@OneToOne和FetchType.EAGER与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?

回答

3

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

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

+0

你是真的...当我宣布Eager时,我有一个问题,我想知道问题是不是存在的idarea。这样我检查。 Tnx – Shinigami

+0

'@ NotFound'对我来说是一个新的......谢谢! – amram99