条件为秒 table 的 Hibernate HQL 查询

Hibernate HQL query with condition on second table

我有两个表(关于足球):一对多关系的联赛和球队。现在我想获得所有联赛,但仅限于那些名字开头的球队,例如"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();

此查询returns所有联赛,也包括所有球队。看起来条件被忽略了。

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

联盟class中的映射是

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

在团队 class 中:

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

我正在使用 Oracle 数据库。 查询有什么问题?

提前致谢。

试试这个查询:

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%");

league.getTeams()的合同是给return联赛的球队。而且该方法将始终 return 表示,无论您以何种方式找到联盟。

您的查询 return 至少有一支以 S 开头的球队的所有联赛。

您需要的查询类似于

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

这应该会得到一个 List<Object[]>,其中每个数组的第一个元素是联赛,第二个元素为空或以 S 开头的球队。