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