【问题标题】:Hibernate: HQL Row Count Subquery issue休眠:HQL 行计数子查询问题
【发布时间】:2011-07-20 17:26:34
【问题描述】:

我正在尝试在 HQL (Hibernate) 中使用子查询/子选择,但它不起作用并引发错误...

我想知道 HQL 中是否有类似这样的东西:(“普通”SQL)

select count(Z) from (SELECT SUM(existencia), almacen, oficina, fila from re_tinventarioubicacion where inventorybranchto = 2 GROUP BY almacen, oficina, fila, estante, entrepano, casilla, precioetiqueta) as Z

我试图将它从 SQL“翻译”为 HQL,但它不起作用......它抛出了这个:

org.hibernate.hql.ast.QuerySyntaxException: 意外令牌

基本上,我需要从生成的子查询中获取行数。

有什么想法吗?

【问题讨论】:

    标签: hibernate hql


    【解决方案1】:

    您可以在 hibernate 中使用本机 SQL 查询,但您需要一个简单的 POJO 来将返回值映射到(实际上在这种情况下您可能会尝试一些内置转换器或尝试设置投影,我不是确定它是否有效)。

    POJO返回值:

    public class MyCount {
        private Integer count;
    
        public void setCount(Integer count) {
            this.count = count;
        }    
    
        public Integer getCount() {
            return count;
        }
    }
    

    查询:

    Query query = getSession().createSQLQuery("select count(*) from dual");
        .addScalar("count")
        .setResultTransformer(Transformers.aliasToBean(MyCount.class));
    
    MyCount count = (MyCount) query.uniqueResult();
    

    【讨论】:

    • 是的,我最终使用了本机 SQL,但没有使用 Projection 或 Transformers。但我相信变形金刚可能是部分解决方案,所以谢谢!
    【解决方案2】:

    如果不查询实体,您无法在 HQL 中选择某些内容。

    【讨论】:

    • 嗯,我想这与您不能将子选择放在 HQL 查询的 from 部分中的事实有关,而只能放在 select where 部分(在我放在那里的示例中,这将是从 SQL 直接“翻译”到 HQL 的情况)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多