Java 如何使用 JPA Criteria API 解析 Oracle 的“rownum”伪列?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/20911763/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 05:16:14  来源:igfitidea点击:

How to resolve Oracle's 'rownum' pseudocolumn with JPA Criteria API?

javahibernatejpa

提问by gadon

I would like to get first row from database using JPA Criteria. I use JPA, Hibernate 4.2.7. In SQL, statement looks like:

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

SELECT * FROM houses WHERE rownum = 1;

My Java code to achive that looks like:

我要实现的 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();

But 'rownum' pseudocolumn cannot be resolved, I get exception:

但是 '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)

Is is possible, and if so, how to get 'rownum' pseudocolumn with Criteria API? Thanks for any suggestions.

是可能的,如果是这样,如何使用 Criteria API 获取“rownum”伪列?感谢您的任何建议。

采纳答案by bradleyfitz

You can accomplish this using setFirstResult and setMaxResults.

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

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

回答by djavaphp

you can set rownum or limits in property of query;

您可以在查询属性中设置 rownum 或限制;

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

q.setFirstResult(0);

q.setFirstResult(0);

q.setMaxResults(30);

q.setMaxResults(30);