2011-03-22 27 views
3

我试图用一个子查询/子选择在HQL(休眠)工作,但它不工作,并抛出一个错误...休眠:HQL行计数的子查询问题

我想知道是否有在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:意外标记

基本上,我需要从得到的子查询中获取行计数。

任何想法?

回答

0

你可以在Hibernate中使用原生的SQL查询,但是你需要一个简单的POJO来映射返回值(实际上在这种情况下,你可以尝试一些内置的变换器或者尝试设置一个Projection,不知道它是否会起作用)。

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(); 
+0

是的,我结束了使用本机SQL,但不是投影也不是变形金刚。但我相信变形金刚可能是一个部分解决方案,所以谢谢! – 2011-04-13 15:44:25

0

你不能在没有查询实体的情况下在HQL中选择一些东西。

+0

嗯,我想这是涉及到的事实,你不能将子查询中的** **从节一个HQL查询,但只能在** select **和** where **部分(这将是直接“从SQL翻译”到HQL的情况,在我放置的示例中)。 – 2011-03-22 22:26:24