【发布时间】:2015-10-28 10:44:24
【问题描述】:
我有一个带有 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;
}
子信息可能并不总是可用。如果相关信息可用,我希望始终返回父对象并初始化子对象。
我尝试使用以下 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 查询中明确设置了左连接提取,谁能指出为什么会发生这种情况?
【问题讨论】:
标签: java oracle hibernate jpa persistence