用于过滤集合数据的Hql查询

时间:2015-05-04 07:08:33

标签: left-join hql

我有一个带有类别和分支列表的餐馆实体。我想搜索特定区域和类别的所有餐馆 所以,我在做

SELECT R 
FROM Restaurant AS R 
  LEFT JOIN R.branches AS branch 
WHERE R.category.name LIKE :category AND branch.name LIKE :branch

它工作正常,但恰好是这样,当最初添加新餐厅时,餐厅没有分店,但我想在结果中显示它们。我不知道如何实现,如何获得具有匹配类别和分支的餐馆(即使它没有分支)。

如果不清楚我想做什么,我正试图做这样的事情......

SELECT R     FROM Restaurant AS R       LEFT JOIN R.branches AS分支     WHERE R.category.name LIKE:category AND(branch is NULL OR branch.name LIKE:branch)

检索具有给定分支名称的那些餐馆,并且还包含那些没有任何分支关联的餐馆。或者换句话说,如果任何餐馆没有任何分支,则将其返回到结果列表以及与搜索区域名称匹配的分支。

1 个答案:

答案 0 :(得分:0)

您可以使用HQL 关键字来使用额外的加入条件:

SELECT R 
FROM Restaurant AS R 
  LEFT JOIN R.branches AS branch WITH branch IS NULL OR branch.name LIKE :branch
WHERE R.category.name LIKE :category

有关详细信息,请查看documentation