我有两张桌子(关于足球):与一对多关系的联赛和球队。现在我想得到所有联赛,但只有那些名字开始的球队,例如用" 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。 查询有什么问题?
提前致谢。
答案 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%");