Java 带聚合函数的Hibernate命名查询
我试图在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子句的查询,而不在结果
<?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>