左连接获取条件失败

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 作为整个对象。这是设计使然,并且由于底层机制、缓存等需要。如果您需要满足某些条件的类别对象,则必须为此编写单独的查询。