Java 如何在Hibernate标准中表达此SQL(可能吗?)

Java 如何在Hibernate标准中表达此SQL(可能吗?),java,sql,hibernate,hibernate-criteria,Java,Sql,Hibernate,Hibernate Criteria,请看看这个答案: 基本上,当存在ORDERBY子句时,获取行的位置。是否可以在Hibernate标准中表达这一点 这是我的问题。我真正想要的是一种优雅的方式来设置动态where子句参数: SELECT x.id, x.position FROM (SELECT dwq.id, @rownum := @rownum + 1 AS position FROM default_work_queue dwq JO

请看看这个答案:

基本上,当存在ORDERBY子句时,获取行的位置。是否可以在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个额外的“和foo=bar”,而无需进行大量的字符串操作。

使用条件是不可能的,因为条件不支持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>();
//选择所需元素之前所有元素的计数
int position=session.createCriteria(Work.class)
.add(限制)
.add(subquerys.lt(“description”),DetachedCriteria.For(Work.class)
.add(Restriction.eq(“id”,id))
.setProjection(Projection.Property(“description”))
.setProjection(Projection.RowCout())
.UniqueResult();
如果已经加载了描述,则可以优化子查询