左连接获取条件失败
Left join fetch with condition fails
我有以下 HQL
查询:
return entityManager().createQuery(
"SELECT page FROM ProjectPage page"
+ " left join fetch page.categorySet as category "
+ " where page.id = :id "
+ " and category.parentCategory is null "
+ " and (category.status != :status_val) "
,ProjectPage.class).setParameter("id", id)
.setParameter("status_val", 1).getSingleResult();
问题是where子句中的条件不成立,例如查询returnsstatus为1的category对象和parentCategory不为null的category对象,虽然我如上所述指定了这个约束! !
如果您期望此查询 return ProjectPage
对象 categorySet
根据 where
条件过滤掉,那么您的期望是错误的。如果具有给定 id 的 ProjectPage
实例包含 任何 类别并通过 where
子句条件,它将被 returned 作为整个对象。这是设计使然,并且由于底层机制、缓存等需要。如果您需要满足某些条件的类别对象,则必须为此编写单独的查询。
我有以下 HQL
查询:
return entityManager().createQuery(
"SELECT page FROM ProjectPage page"
+ " left join fetch page.categorySet as category "
+ " where page.id = :id "
+ " and category.parentCategory is null "
+ " and (category.status != :status_val) "
,ProjectPage.class).setParameter("id", id)
.setParameter("status_val", 1).getSingleResult();
问题是where子句中的条件不成立,例如查询returnsstatus为1的category对象和parentCategory不为null的category对象,虽然我如上所述指定了这个约束! !
如果您期望此查询 return ProjectPage
对象 categorySet
根据 where
条件过滤掉,那么您的期望是错误的。如果具有给定 id 的 ProjectPage
实例包含 任何 类别并通过 where
子句条件,它将被 returned 作为整个对象。这是设计使然,并且由于底层机制、缓存等需要。如果您需要满足某些条件的类别对象,则必须为此编写单独的查询。