JPA加入多个实体

时间:2017-02-09 13:44:56

标签: hibernate jpa join

我的问题如下

@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等单个查询中加载所有内容。

你知道如何实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

在HQL / JPQL中,你几乎就像你提到的那样写了:

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

关键是应用JOIN FETCH而不仅仅是JOIN,以避免在获取标识符后获取对象的其他查询。