2013-03-14 22 views
2

我有一個簡單的JPA實體(Hibernate實現):Hibernate和SQL連接與預先抓取關係類型

User.java:

@Entity 
@Table(name = "USER") 
public class User { 

    @OneToOne(optional=false) 
    @JoinColumn(name = "USER_STATUS_ID", nullable = false) 
    private UserStatus userStatus; 

UserStatus:

@Entity 
@Table(name = "USER_STATUS") 
public class UserStatus { 

    @Column(name = "name", nullable = false) 
    private String name; 

以及正在生成查詢實體的查詢如下所示:

...from user left outer join user_status on... 

我的問題是:爲什麼休眠執行此外連接,而不是內部聯接(因爲我已經告訴它,它是不能爲空或可選)。有什麼辦法強制內連接?

謝謝。

+0

什麼是UserStatus的映射? – Thierry 2013-03-14 15:29:26

+0

我用userStatus映射更新了問題。這裏沒有任何內容,但是對於幾個字符串,沒有任何對象引用。 – StuPointerException 2013-03-14 15:38:34

+0

對不起,休眠版本和查詢獲取數據的代碼可能也是有意義的。你確定它是生成你的SQL的休眠嗎? Hibernate的SQL看起來更像是:...來自USER this_內部加入USER_STATUS userstatus1_在this_.USER_STATUS_ID = userstatus1_.ID ...對於我來說,userStatus是默認提取的(對於任何* ToOne映射)和內部聯接。 – Thierry 2013-03-14 15:52:45

回答

0

如果我是正確的,Hibernate總是使用左外連接,你不能強迫hibernate做內連接。當你檢索父實體時,它不強制所有的父實體都有孩子。所以如果使用內連接,你可能會沒有結果。