如何使用JPA Criteria API解决Oracle的’rownum’伪列?

我想使用JPA Criteria从数据库获取第一行。 我使用JPA,Hibernate 4.2.7。 在SQL中,语句如下所示:

SELECT * FROM houses WHERE rownum = 1; 

我的Java代码看起来像:

  CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery query = builder.createQuery(House.class); Root root = query.from(House.class); query.select(root).where(builder.equal(root.get("rownum"), 1)); TypedQuery tQuery = entityManager.createQuery(query); House house = tQuery.getSingleResult(); 

但’rownum’伪列无法解决,我得到例外:

  java.lang.IllegalArgumentException: Unable to resolve attribute [rownum] against path at org.hibernate.ejb.criteria.path.AbstractPathImpl.unknownAttribute(AbstractPathImpl.java:120) at org.hibernate.ejb.criteria.path.AbstractPathImpl.locateAttribute(AbstractPathImpl.java:229) at org.hibernate.ejb.criteria.path.AbstractPathImpl.get(AbstractPathImpl.java:200) 

是可能的,如果是的话,如何使用Criteria API获得’rownum’伪列? 谢谢你的任何建议。

您可以使用setFirstResult和setMaxResults完成此操作。

 session.createCriteria(Foo.class) .setFirstResult(0) .setMaxResults(1); 

你可以在查询属性中设置rownum或limit;

 Query q =entityManager.createQuery("select * from employee_table"); 

q.setFirstResult(0);

q.setMaxResults(30);