【发布时间】:2010-12-18 11:45:57
【问题描述】:
我正在尝试在以下场景中使用 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'
如果您有任何建议,请帮助我。
【问题讨论】:
-
我不明白你的伪代码条件。你真的是说所有路由都需要有相同的序列号吗?
-
一个 Schedule 对象可以有 n 个 Route 对象。 (其中 n 通常为 2 或 3)。 Route.sequence 的取值范围为 0 到 n-1。实际上它是一个简单的航班信息系统的模式。计划表包含航班号、计划日期/时间和航班状态等信息。构成航班路线的城市被放入 Route 表中(因为每个航班可以有可变数量的路线城市)。 Route.sequence 编号标识了一个城市在飞行中所处的顺序。
-
我一直试图用 Criteria API 弥补的查询是搜索到达给定城市 X 的所有航班。
标签: java hibernate criteria-api