带条件的左连接提取失败

时间:2015-01-14 09:41:17

标签: sql database hibernate left-join hql

我有以下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子句中的条件失败,例如,查询返回状态为1的类别对象和parentCategory不为null的类别对象,尽管我指定了如上所述的约束!!

1 个答案:

答案 0 :(得分:2)

如果您希望此查询返回基于ProjectPage条件过滤掉categorySet where的{​​{1}}对象,那么您的期望是错误的。如果具有给定ID的ProjectPage实例包含传递where子句条件的任何类别,则会将作为整个对象返回。这是设计的,并且由于底层机制,缓存等原因而需要。如果您需要满足某些条件的类别对象,则必须为此编写单独的查询。