当前位置: 首页 > 面试题库 >

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

林德辉
2023-03-14
问题内容

我想使用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);


 类似资料:
  • 问题内容: 我想使用JPA Criteria从数据库中获取第一行。我使用JPA,Hibernate 4.2.7。在SQL中,语句如下所示: 我要实现的Java代码如下所示: 但是’rownum’伪列无法解析,我得到了例外: 有可能,如果可以,如何使用Criteria API获取“ rownum”伪列?感谢您的任何建议。 问题答案: 您可以使用setFirstResult和setMaxResults

  • 我很难将存储过程从SQLServer转换为Oracle以使我们的产品与之兼容。 我有一些查询,根据时间戳返回一些表的最新记录: SQL Server: = 但Oracle: = 我以这种方式封装了Oracle查询以满足我的需求: 这是可行的。但对我来说,这听起来像是一个可怕的黑客攻击,尤其是当我在相关的表中有很多记录时。 实现这一目标的最佳方式是什么?

  • 问题内容: 我在oracle中有一个employee表,其中包含名称,薪水和其他详细信息。 我正在尝试拿第二高的薪水,但无法拿到。 这一个工作正常 并给出输出: 但是当我使用相同的查询来获取第二高的行而没有得到任何输出时 但是当我更换与它给人的第一两项纪录输出。请有人解释为什么不起作用 问题答案: 这将起作用: 从(从薪金中选择e_salary订单中的薪水,按薪水从十进制中选择rn)从(中选择薪水

  • 使用带有规范和分页的Eclipse Link JPA 2.5.2,我对Oracle ROWNUM的执行方式有问题。Eclipse Link生成的查询如下: 为第一页运行该查询应返回0到25之间的行,为第二页运行相同的查询应返回25到50之间的行。 问题是第一页的记录也出现在第二页,我猜是因为submitteddate可以包含NULL值并且ORDER BY子句在ROWNUM和rnum条件或类似的东西

  • 本文向大家介绍mysql类似oracle rownum写法实例详解,包括了mysql类似oracle rownum写法实例详解的使用技巧和注意事项,需要的朋友参考一下 rownum是oracle才有的写法,rownum在oracle中可以用于取第一条数据,或者批量写数据时限定批量写的数量等 mysql取第一条数据写法 oracle取第一条数据写法 ok,上面是mysql和oracle取第一条数据的

  • 问题内容: 在Oracle 10g中,我有以下SQL: 返回: 我想扩展此查询以确定此结果集中的dog.id的oracle rownum。 我试过了 但这并不能很好地解决(无论我匹配哪个dog.id,它都返回1)。我原本希望回来3。 谢谢你的帮助! 笔记 http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html 我很确