我正在尝试在以下场景中使用Criteria API:
Schedule
和Route
(带有类和映射)。Route
与Schedule
有多对一的关系。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'
如果您有任何建议,请帮助我。
答案 0 :(得分:1)
问题源于预测和限制的实施问题。在尝试对同一列进行投影和限制时似乎存在错误 - 生成的sql无效。你会发现,如果直接对你的数据库运行那个sql它将无法工作。
该错误最初被记录here,看起来它不会被修复。但后来我发现另一个类似的错误被记录here但是我无法确定哪个版本可用。
可以找到更多关于问题及其背后理论的讨论here。
还有another stackoverflow item dealing with the same question并提供解决方案。我没有试图看看这种方法是否有效,但它似乎对参与该问题的人有用。