0

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

  • 我有两个表,Schedule并且Route(带有它们的类和映射)。
  • Route与 具有多对一关系Schedule
  • Route有一个整数属性sequence

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

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

我已经尝试了以下标准代码:

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'

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

4

1 回答 1

1

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

该错误最初记录在此处,看起来无法修复。但是后来我看到这里记录了另一个类似的错误,但我无法确定修复将在哪个版本中可用。

可以在此处找到更多涉及该问题的讨论及其背后的理论。

还有另一个 stackoverflow 项目处理相同的问题并提供了解决方案。我没有尝试查看这种方法是否有效,但它似乎对涉及该问题的人有效。

于 2009-11-24T21:14:49.230 回答