0

次のシナリオで Criteria API を使用しようとしています。

  • 2 つのテーブルScheduleRoute(クラスとマッピングを含む) があります。
  • Routeは と多対 1 の関係にあり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をデータベースに対して直接実行すると、機能しないことがわかります。

バグはもともとここに記録されており、修正されないように見えました。しかし、別の同様のバグがここに記録されていることがわかりましたが、どのリリースで修正が利用可能になるかわかりません.

この問題とその背後にある理論について詳しく説明している議論は、ここで見つけることができます。

同じ質問を扱う別のスタックオーバーフロー項目もあり、解決策を提供します。このアプローチが機能するかどうかは試していませんが、問題に関与している人々にとっては機能しているようです。

于 2009-11-24T21:14:49.230 に答える