Hibernate:HQL行数子查询问题

3

我想在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: 意外的标记

基本上,我需要从结果子查询中获取行数。

有什么想法吗?

2个回答

0

您可以使用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。但我相信Transformers可能是一个部分解决方案,所以谢谢! - Ber Baquero Stand

0

在HQL中,如果没有查询实体,就无法选择任何内容。


嗯,我猜这可能与在HQL查询的from部分中无法放置子查询有关,而只能在selectwhere部分中放置(这是直接从SQL转换到HQL的情况,在我提供的示例中)。 - Ber Baquero Stand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接