2012-11-06 86 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