【发布时间】:2018-07-23 17:05:10
【问题描述】:
如何创建 Criteria API 查询之类的
SELECT
(select count(*) from table1),
(select count(*) from table2),
(select count(*) from table3)
注意:主查询中没有 FROM 语句
更新:我正在使用 postgreSQL,我需要准确地创建 Criteria API 查询,例如:
CriteriaBuilder criteriaBuilder = getSession().getCriteriaBuilder();
CriteriaQuery<Long[]> mainQuery= criteriaBuilder.createQuery(Long[].class);
Subquery<Long> subQuery1= mainQuery.subquery(Long.class);
Root<Table1> subQuery1Root = subQuery1.from(Table1.class);
subQuery1.select(criteriaBuilder.count(subQuery1Root));
Subquery<Long> subQuery2= mainQuery.subquery(Long.class);
Root<Table2> subQuery2Root = subQuery2.from(Table2.class);
subQuery2.select(criteriaBuilder.count(subQuery2Root));
【问题讨论】:
-
无效的 ANSI SQL。您使用的是哪个 dbms?
-
您可以简单地执行 UNION ALL 代替。或者做交叉连接。
-
@jarlh 但这可能不适用于他的 Java 代码。实际上,该语法对 MySQL 有效,可能还有其他一些语法。
-
如果您在这里没有得到满意的答案,您可以考虑将其作为原始查询运行。不是那么灵活,但它可能会暂时解决您的问题。
标签: java sql criteria-api