【发布时间】:2014-01-03 20:01:41
【问题描述】:
我想使用 JPA 标准从数据库中获取第一行。我使用 JPA,休眠 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”伪列?感谢您的任何建议。
【问题讨论】:
-
您不能在标准 api 中使用伪列。