我有一个sql语句如下,
select *
from (select distinct field1
from X
where field2 = 'value2'
and field3 > 'value3'
and field4 in(value4)
and field5 in(value5)
and field6 is null
order by field1)
where ROWNUM <= 20 ;
我尝试将其转换为HQL,如下所示,
DetachedCriteria detachedQuery = DetachedCriteria.forClass(X.class)
.setProjection(Projections.property("field1"))
.add(Restrictions.eq("field2",value2))
.add(Restrictions.gt("field1", value1))
.add(Restrictions.in("field3",value3))
.add(Restrictions.in("field4", value4))
.add(Restrictions.isNull("field5"))
.addOrder(Order.asc("field1"));
Criteria criteria= session.createCriteria(X.class);
criteria.add(Property.forName("field1")
.in(detachedQuery))
.setMaxResults(20);
我是否正确?。
答案 0 :(得分:1)
您并未请求明确的投影,而且您只能.in(subquery)
必须使用Subqueries
类,除了看起来没问题。
DetachedCriteria detachedQuery = DetachedCriteria.forClass(X.class)
.setProjection(Projections.distinct(Projections.property("field1")))
.add(Restrictions.eq("field2",value2))
.add(Restrictions.gt("field1", value1))
.add(Restrictions.in("field3",value3))
.add(Restrictions.in("field4", value4))
.add(Restrictions.isNull("field5"))
.addOrder(Order.asc("field1");
Criteria criteria= session.createCriteria(X.class);
criteria.add(Property.forName("field1")
.in(detachedQuery))
.setMaxResults(20);