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' 添加到 quere 的注释部分,而无需进行大量字符串操作。

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 回答