java - 如何使用 JPA Criteria API 解析 Oracle 的 'rownum' 伪列?

标签 java hibernate jpa

我想使用 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”伪列?感谢您的任何建议。

最佳答案

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

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

关于java - 如何使用 JPA Criteria API 解析 Oracle 的 'rownum' 伪列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20911763/

相关文章:

java - log4j xml配置错误

java - 地理编码,获取角点纬度经度

java - 当最后一行不包含换行符时从 Std 输入读取最后一行

javascript - Pentaho/Kettle - Javascript 或 java 获取早于指定日期的文件名

java - 如何防止Hibernate缓存?

java - 将 spring-data-jpa 引入项目会导致 Spring 停止处理 @RequestMapping 注解

java - Spring JpaRepository 使用通用实体

mysql - 在 Ubuntu 12.04 上为 MySQL 配置 hibernate.cfg.xml

java - 执行 native 更新查询后,检索到的实体中仍然存在旧值

java - 在 Java SE 中使用 CDI 和 JPA 的最简单方法是什么?