Java 带聚合函数的Hibernate命名查询

Java 带聚合函数的Hibernate命名查询,java,hibernate,named-query,Java,Hibernate,Named Query,我试图在Hibernate中执行命名查询。查询在此映射文件中定义: <?xml version="1.0"?> 我试图做的是让命名查询返回由另一列分组的一列的总和。但是,Hibernate抛出了一个错误,我怀疑这是因为查询结果不包含ID列 18:06:44,728 ERROR JDBCExceptionReporter:101 - Column not found: MY1_1_0_ 有办法解决这个问题吗?必须能够在Hibernate中执行包含GROUPBY子句的查询,而不在结果

我试图在Hibernate中执行命名查询。查询在此映射文件中定义:

<?xml version="1.0"?>
我试图做的是让命名查询返回由另一列分组的一列的总和。但是,Hibernate抛出了一个错误,我怀疑这是因为查询结果不包含ID列

18:06:44,728 ERROR JDBCExceptionReporter:101 - Column not found: MY1_1_0_
有办法解决这个问题吗?必须能够在Hibernate中执行包含GROUPBY子句的查询,而不在结果中包含ID


如果有更好的方法,我愿意接受其他不使用命名查询的建议。

我认为问题在于您的数据库,而不是hibernate。我怀疑它不支持使用带有别名列的“groupby”

您是否尝试过:

FROM MY_TABLE WHERE SRC_PORTFOLIO= :portfolio GROUP BY {position.instrument} 
您可以简单地向查询结果集中添加一个“随机”Id,并使Hibernate高兴,即

    SELECT
    MAX(YOUR_ID_COLUMN) AS {position.id}, 
    SUM(LEG_ONE_NOMINAL) AS {position.quantity}, 
    ID_INSTRUMENT AS {position.instrument} 
    FROM MY_TABLE WHERE SRC_PORTFOLIO= :portfolio GROUP BY ID_INSTRUMENT

事实上,我找到了一个更好的解决方案(针对我的案例),但这并不适用于所有案例

将instrument和quantity设置为复合键意味着我可以完全去掉ID字段。我将其添加到映射XML中

    <composite-id>
        <key-property name="portfolio" />
        <key-property name="instrument" />
    </composite-id>


我将保留接受的答案,因为它在当时起到了帮助作用(我的原始问题中没有公文包栏)。

很好的解决方案,这确实让Hibernate感到高兴。这是一个有点变通的办法,但我看不到任何其他方式
    SELECT
    MAX(YOUR_ID_COLUMN) AS {position.id}, 
    SUM(LEG_ONE_NOMINAL) AS {position.quantity}, 
    ID_INSTRUMENT AS {position.instrument} 
    FROM MY_TABLE WHERE SRC_PORTFOLIO= :portfolio GROUP BY ID_INSTRUMENT
    <composite-id>
        <key-property name="portfolio" />
        <key-property name="instrument" />
    </composite-id>