2017-02-09 61 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的所有查询不仅仅是我现在写的那个。没有机会强迫这种在模型声明中查询的方式。 –