【发布时间】:2012-02-04 13:23:02
【问题描述】:
我正在使用 Glassfish 和 JSF 构建我的第一个 Java EE Web 应用程序。我对条件查询相当陌生,我有一个需要执行的查询,但 javaee6 教程在示例上似乎有点薄。无论如何,我很难创建查询。
目标:我想拉出存储文件最多的公司。 公司与 Documents 具有 OneToMany 关系。 Documents 与多个表具有 ManyToOne 关系,“usertype”列将它们区分开来。
MySQL 查询:
SELECT USERID, COUNT(USERID) AS CNT
FROM DOCUMENTS
WHERE USERTYPE="COMPANY"
GROUP BY USERID
ORDER BY CNT DESC
谢谢
--更新-- 根据用户的反馈,这是我目前所拥有的:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Documents> cqry = cb.createQuery(Documents.class);
//Intersting Stuff
Root<Documents> root = cqry.from(Documents.class);
Expression userid = root.get("userID");
Expression usertype = root.get("userType");
Expression count = cb.count(userid);
cqry.multiselect(userid, count);
Predicate userType = cb.equal(usertype, "COMPANY");
cqry.where(userType);
cqry.groupBy(userid);
cqry.orderBy(cb.desc(count));
//more boilerplate
Query qry = em.createQuery(cqry);
List<Documents> results = qry.getResultList();
我得到的错误是:
Exception Description: Partial object queries are not allowed to maintain the cache or be edited. You must use dontMaintainCache().
典型错误,对我来说毫无意义!
【问题讨论】:
-
尝试将查询从 CriteriaQuery
反类型化为 CriteriaQuery,以便在不违反 API 的情况下选择计数。如果您还发布有关表/实体的更多信息,我可以尝试其他方式
标签: java jpa criteria-api