我有一个带有Child OneToOne关系的Hibernate Parent对象:
@OneToOne
@Fetch(FetchMode.JOIN)
@NotFound(action=NotFoundAction.IGNORE)
@JoinColumns({
@JoinColumn(name="column_a", referencedColumnName="column_a", insertable = false, updatable = false),
@JoinColumn(name="column_b", referencedColumnName="column_b", insertable = false, updatable = false),
@JoinColumn(name="column_c", referencedColumnName="column_c", insertable = false, updatable = false)
})
public Child getChild()
{
return child;
}
儿童信息可能并不总是可用。我希望始终返回Parent对象,并且如果相关信息可用,则初始化Child对象。
我尝试使用以下HQL来检索父对象列表:
String queryString = "select parent from Parent parent"
+ " left join fetch parent.child child "
+ " where parent <.... meets criteria> "
EntityManager em = getEntityManager();
Query query = em.createQuery(queryString);
query.setParameter(<set parameters...>);
query.getResultList();
当我查看这个HQL生成的SQL时,它会在原始SELECT之后为每个Child执行单独的SELECT。
有人能指出我为什么会发生这种情况,将FetchMode设置为JOIN并在HQL查询中明确设置左连接提取?
答案 0 :(得分:0)
您的孩子班级是否也有一些关联? 请参阅以下可能对您有用的链接。
Avoiding n+1 eager fetching of child collection element association