在第二个表上使用条件的Hibernate HQL查询

时间:2015-03-13 07:42:44

标签: oracle hibernate hql conditional-statements one-to-many

我有两张桌子(关于足球):与一对多关系的联赛和球队。现在我想得到所有联赛,但只有那些名字开始的球队,例如用" S"。

到目前为止,我有这个:

Query query = session.createQuery("select l from League l left join l.teams as t with t.name like :name order by l.id");
query.setParameter("name", "S%");
List<League> list = query.list();

此查询返回所有联赛,但也返回所有球队。看起来条件被忽略了。

我想要的只是获得所有联赛以及那些属于特定联赛的球队(由某些条件指定)。所以有可能得到没有球队的联赛。

联盟类中的映射是

@OneToMany(mappedBy = "league", fetch = FetchType.EAGER)
private List<Team> teams;

并在Team类中:

@ManyToOne
@JoinColumn(name = "LEAGUE_FK")
private League league;

我正在使用Oracle DB。 查询有什么问题?

提前致谢。

2 个答案:

答案 0 :(得分:1)

league.getTeams()的合同是返回联盟的球队。无论你如何找到联盟的方式,这种方法总能回归。

您的查询将返回至少包含以S开头的团队的所有联赛。

您需要的查询类似于

select l, t from League l left join l.teams t on t.name like :name order by l.id

那应该给你一个List<Object[]>,其中每个aray的第一个元素是一个联盟,第二个是null或一个以S开头的团队。

答案 1 :(得分:-1)

尝试此查询:

Query query = session.createQuery("select l from League l where l in (select l from Team t where t.name like :name) order by l.id");
query.setParameter("name", "S%");