Java 根据Hibernate命名查询中的参数选择分组
我在XML配置中定义了一个名为Hibernate的查询 该查询生成有关个人人口统计信息的汇总报告。在我们居住的地方,那个人可以住在一个省或一个县 我想知道是否可以根据hibernate查询参数按省或县聚合查询 以下是我尝试过的:Java 根据Hibernate命名查询中的参数选择分组,java,sql,oracle,hibernate,Java,Sql,Oracle,Hibernate,我在XML配置中定义了一个名为Hibernate的查询 该查询生成有关个人人口统计信息的汇总报告。在我们居住的地方,那个人可以住在一个省或一个县 我想知道是否可以根据hibernate查询参数按省或县聚合查询 以下是我尝试过的: SELECT to_char(case when :groupReportBy = 'province' then PROVINCE else COUNTY end), COUNT(distinct PERSON_TABLE.PERSON_ID) as {pe
SELECT to_char(case when :groupReportBy = 'province' then PROVINCE else COUNTY end),
COUNT(distinct PERSON_TABLE.PERSON_ID) as {personReport.numOfPeople}
--, There are some other aggregation things that happen here as well
FROM
PERSON_TABLE PI
WHERE
PI.BDATE >= date '2014-01-01' and PI.BDATE <= date '2014-12-31'
GROUP BY
case when :groupReportBy = 'province' then PROVINCE else COUNTY end);
我从Java代码中执行查询,如下所示:
private List getReport (String namedQuery, String groupReportBy) {
Session session = sessionFactory.getCurrentSession();
Query query = session.getNamedQuery(namedQuery);
query.setParameter("reportBy", reportBy);
return query.list();
}
我正在使用Oracle数据库
我真的不想使用CriteriaAPI重新编写这些查询。它们实际上是超级长的,而且有很多
在SQL中有这样做的方法吗?我从未用组参数测试过它,但我假设它的行为与JPQL/HQL查询的其他部分相同。 NamedQuery是预编译的,因此以后不能更改,参数除外 我花了2分钟研究了JPA规范,但没有找到在运行时可以修改的确切定义。所以下面的内容可能不是100%正确,但对你来说应该足够了
JPQL/HQL关键字和模型对象属性在运行时不能在NamedQuery中更改,原因可能是查询转换为基于对象的表示。因此,您有必要编写一个标准的JPQL/HQL查询 首先,我要删除查询末尾额外的右括号(可能是
select
中从复制/粘贴到\u char
片段的剩余部分)。
private List getReport (String namedQuery, String groupReportBy) {
Session session = sessionFactory.getCurrentSession();
Query query = session.getNamedQuery(namedQuery);
query.setParameter("reportBy", reportBy);
return query.list();
}