2017-02-09 59 views
0

我的問題是如下JPA加入過多個實體

@Entity 
public class MainType{ 
    @Fetch(FetchMode.JOIN) 
    @ManyToOne(fetch = FetchType.EAGER) 
    private SubType subObject; 
} 

@Entity 
public class SubType{ 
    @Fetch(FetchMode.JOIN) 
    @ManyToOne(fetch = FetchType.EAGER) 
    private SubSubType subsubObject; 
} 

當我查詢使用Hibernate MainType以免費獲贈收藏休眠將使聯接。類似於 select * from MainType left join SubType這很好,但它爲第一個查詢返回以加載SubSubType的每條記錄做出另一次選擇。我想在一個查詢中加載所有內容,如select * from MainType left join SubType left join SubSubType

你知道有什麼辦法可以做到這一點嗎?

+0

你如何「查詢MainType」? – acm

+0

@acm via Hibernates Criteria-API –

+0

請問[這個問題](http://stackoverflow.com/questions/32453989/what-is-the-solution-for-the-n1-issue-in-hibernate)對你有幫助嗎?否則,你可以發佈你的代碼嗎? – acm

回答

0

在HQL/JPQL你會寫,幾乎你所說的:

SELECT mt FROM MainType mt 
    LEFT JOIN FETCH mt.subObject so 
    LEFT JOIN FETCH so.subSubObject sso 

的關鍵是應用JOIN FETCH並不僅僅是一個JOIN避免額外的查詢獲取後,將獲取的對象身份標識。

+0

是的,我也是這麼想的。但我使用Criteria API進行查詢。另外,我希望MainType的所有查詢不僅僅是我現在寫的那個。沒有機會強迫這種在模型聲明中查詢的方式。 –