Java 如何使用JPA标准API解析Oracle的“rownum”伪列?
我想使用JPA标准从数据库中获取第一行。我使用JPA,Hibernate4.2.7。 在SQL中,语句如下所示: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
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