使用Hibernate Criteria API查询与投影的多对一关系

时间:2009-11-19 20:38:50

标签: java hibernate criteria-api

我正在尝试在以下场景中使用Criteria API:

  • 我有两个表,ScheduleRoute(带有类和映射)。
  • RouteSchedule有多对一的关系。
  • Route具有整数属性sequence

现在我需要获取其关联的Route对象满足以下条件的所有Schedule对象:

route.sequence=no. of all Route objects associated with the given Schedule object

我为它尝试了以下Criteria代码:

Criteria crit = getSession().createCriteria(getPersistentClass())
    .createCriteria("routes", "route")
    .setProjection(Projections.projectionList()
    .add( Projections.rowCount(), "routeCount"))
    .add(Restrictions.not(Restrictions.ltProperty("route.sequence", "routeCount")));

但它会生成以下sql:

select count(*) as y0_ 
from schedule this_
inner join route route1_ on this_.ID=route1_.scheduleId
where route1_.sequence<y0_

并抛出以下错误:

Unknown column 'y0_' in 'where clause'

如果您有任何建议,请帮助我。

1 个答案:

答案 0 :(得分:1)

问题源于预测和限制的实施问题。在尝试对同一列进行投影和限制时似乎存在错误 - 生成的sql无效。你会发现,如果直接对你的数据库运行那个sql它将无法工作。

该错误最初被记录here,看起来它不会被修复。但后来我发现另一个类似的错误被记录here但是我无法确定哪个版本可用。

可以找到更多关于问题及其背后理论的讨论here

还有another stackoverflow item dealing with the same question并提供解决方案。我没有试图看看这种方法是否有效,但它似乎对参与该问题的人有用。