【问题标题】:Execute query with Criteria API without FROM statement使用没有 FROM 语句的 Criteria API 执行查询
【发布时间】: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


【解决方案1】:

ANSI SQL 替代方案:

SELECT *
from
  (select count(*) from table1) t1 cross join
  (select count(*) from table2) t2 cross join
  (select count(*) from table3) t3

【讨论】:

    猜你喜欢
    • 2015-06-26
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多