2009-11-19 47 views
0

我想使用標準的API在以下情形:使用Hibernate的標準API查詢多對一一對一的關係與預測

  • 我有兩個表,ScheduleRoute(與他們的類和映射)。
  • RouteSchedule有多對一的關係。
  • Route具有整數屬性sequence

現在我需要獲取所有這些計劃的對象,其相關的路由對象滿足以下條件:

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' 

請幫助我,如果您有任何建議。

+0

我不明白你的僞代碼條件。你是否意味着所有的路線都需要有相同的序列號? – meriton 2009-11-19 20:49:27

+0

一個Schedule對象可以有n個Route對象。 (其中n通常是2或3)。 Route.sequence的值可以從0到n-1。其實它是一個簡單的航班信息系統的架構。時刻表包含諸如航班號,時間表日期/時間和航班狀態等信息。構成航班路線的城市被放入路線表中(因爲每個航班可能有不同數量的航線城市)。 Route.sequence編號標識城市在飛行中的順序。 – craftsman 2009-11-20 07:15:15

+0

我一直試圖彌補Criteria API的查詢是搜索到達給定城市X的所有航班。 – craftsman 2009-11-20 07:17:49

回答

1

該問題源於預測和限制的實施問題。似乎在嘗試投影和限制同一列時出現了一個錯誤 - 生成的sql無效。你會發現,如果直接對你的數據庫運行該SQL,它將無法正常工作。

該錯誤最初記錄爲here,它看起來像它不會被修復。但後來我看到另一個類似的錯誤記錄here,但我不知道哪個版本的修補程序將可用英寸

關於這個問題和理論背後更多的討論可以找到here

還有another stackoverflow item dealing with the same question並提供解決方案。我沒有試圖看看這種方法是否有效,但它似乎對涉及這個問題的人有用。