Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JPA标准API解析Oracle的“rownum”伪列?_Java_Hibernate_Jpa - Fatal编程技术网

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

Java 如何使用JPA标准API解析Oracle的“rownum”伪列?,java,hibernate,jpa,Java,Hibernate,Jpa,我想使用JPA标准从数据库中获取第一行。我使用JPA,Hibernate4.2.7。 在SQL中,语句如下所示: SELECT * FROM houses WHERE rownum = 1; CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery<House> query = builder.createQuery(House.class); Root<Ho

我想使用JPA标准从数据库中获取第一行。我使用JPA,Hibernate4.2.7。 在SQL中,语句如下所示:

SELECT * FROM houses WHERE rownum = 1;
    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();
我要实现的Java代码如下所示:

SELECT * FROM houses WHERE rownum = 1;
    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();

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

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

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

可以在查询的属性中设置rownum或limits

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


q、 setMaxResults30

您不能在criteria api中使用伪列。这是JPA的优点,与数据库如何管理限制无关,因为JPA始终是相同的。对于我使用实体管理器的示例,它将是:tQuery.setFirstResult0;tQuery.setMaxResults1;谢谢你的回答!JPA是否为Oracle使用特定于db的方言rownum,为其他受支持的db使用TOP/LIMIT创建高效查询?如果查询是这样的,那么我认为我们不能使用setMaxResults。例如:从表中选择1,其中col1='someValue'和ROWNUM