Tim*_*Tim 6 java jpa criteria-api
我无法弄清楚如何表示以下JPQL查询:
SELECT count(e) FROM Foo e
Run Code Online (Sandbox Code Playgroud)
使用Criteria API.我正在尝试的是:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Foo> c = cb.createQuery(Foo.class);
Root<Foo> f = c.from(Foo.class);
c.select(cb.count(f));
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我也尝试过:
c.select(cb.count(f.get("id"));
Run Code Online (Sandbox Code Playgroud)
这适用于JPA2,Eclipselink.
小智 11
试试这个,这与hibernate 3.5.1一起使用:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> c = cb.createQuery(Long.class);
Root<Foo> f = c.from(Foo.class);
c.select(cb.count(f));
int count = em.createQuery(c).getSingleResult().intValue();
Run Code Online (Sandbox Code Playgroud)
这是一个非常古老的问题,但是对于completness来说这是一个简单的补充:
标题说了"使用countDistinct",所以这里应该提到countDistinct:
CriteriaBuilder critBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> critQuery = criteriaBuilder.createQuery(Long.class);
Root<Foo> root = critQuery.from(Foo.class);
critQuery.select(critBuilder.countDistinct(root));
int count = entityManager.createQuery(critQuery).getSingleResult().intValue();
Run Code Online (Sandbox Code Playgroud)
如果您不想计算双倍的行,这很重要.如果要避免ResultList中的双行,则必须使用:
CriteriaBuilder critBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> critQuery = criteriaBuilder.createQuery(Long.class);
Root<Foo> root = critQuery.from(Foo.class);
critQuery.select(root).distinct(true);
List<Foo> result = entityManager.createQuery(critQuery).getResultList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12664 次 |
| 最近记录: |