我想使用JPA Criteria从数据库获取第一行。我使用JPA,Hibernate 4.2.7。 在SQL中,语句如下所示:
SELECT * FROM houses WHERE rownum = 1;
我的Java代码看起来像:
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<House> query = builder.createQuery(House.class);
Root<House> root = query.from(House.class);
query.select(root).where(builder.equal(root.get("rownum"), 1));
TypedQuery<House> 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'伪列?感谢您的任何建议。
答案 0 :(得分:9)
您可以使用setFirstResult和setMaxResults完成此操作。
session.createCriteria(Foo.class)
.setFirstResult(0)
.setMaxResults(1);
答案 1 :(得分:3)
您可以在查询属性中设置rownum或limit;
Query q =entityManager.createQuery("select * from employee_table");
q.setFirstResult(0);
q.setMaxResults(30);