0

このSOの回答を見てください:

MySQLはORDER BYで行の位置を取得します

基本的には、order by 句がある場合に行の位置を取得します。これをHibernate基準で表現することは可能ですか?

これが私が持っているクエリです。私が本当に探しているのは、動的な where 句のパラメーターを設定するエレガントな方法です。

SELECT x.id, 
       x.position
  FROM (SELECT dwq.id,
               @rownum := @rownum + 1 AS position
          FROM default_work_queue dwq
          JOIN (SELECT @rownum := 0) r 
          WHERE dwq.type=4 *AND FOO=BAR*
      ORDER BY dwq.description ASC) x
 WHERE x.id=540;

つまり、一連の文字列操作を行わずに、0-n 個の余分な 'and foo=bar' をクエリの注目部分に追加できるようにしたいと考えています。

4

1 に答える 1

1

基準は FROM 句で任意の sql をサポートしていないため、基準では不可能です。ただし、このクエリの別のアイデアは次のとおりです

// select the count of all elements before the wanted element
int position = session.createCriteria(Work.class)
    .add(restrictions)
    .add(Subqueries.lt("description", DetachedCriteria.For(Work.class)
        .add(Restriction.eq("id", id))
        .setProjection(Projection.Property("description"))))
    .setProjection(Projection.RowCout())
    .UniqueResult<int>();

説明が既にロードされている場合は、サブクエリを最適化できます

于 2012-08-28T09:03:03.147 に答える