我的问题如下
@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来接收一个集合时,hibernate会进行连接。就像是
select * from MainType left join SubType
这是好的,但它会为第一个查询返回加载SubSubType的每条记录做另一个选择。我想在select * from MainType left join SubType left join SubSubType
等单个查询中加载所有内容。
你知道如何实现这一目标吗?
答案 0 :(得分:0)
在HQL / JPQL中,你几乎就像你提到的那样写了:
SELECT mt FROM MainType mt
LEFT JOIN FETCH mt.subObject so
LEFT JOIN FETCH so.subSubObject sso
关键是应用JOIN FETCH
而不仅仅是JOIN
,以避免在获取标识符后获取对象的其他查询。