是否有可能在JPA/Hibernate中运行如下所示的查询?如何在JPA/Hibernate中使用集合函数调用SQL查询
select v.country,
v.site,
SUM(case when s.id = 1 then 1 else 0 end) as Total_SuspectedViolations,
SUM(case when s.id = 2 then 1 else 0 end) as Total_ConfirmedViolations,
SUM(case when s.id = 3 then 1 else 0 end) as Total_ConfirmedNoViolations,
SUM(case when s.id = 4 then 1 else 0 end) as Total_NotDetermined,
COUNT(*) Total
from violations v
inner join status s
on v.status_id = s.id
group by v.country, v.site
或
select v.country,
v.site,
SUM(case when v.status_id = 1 then 1 else 0 end) as Total_SuspectedViolations,
SUM(case when v.status_id = 2 then 1 else 0 end) as Total_ConfirmedViolations,
SUM(case when v.status_id = 3 then 1 else 0 end) as Total_ConfirmedNoViolations,
SUM(case when v.status_id = 4 then 1 else 0 end) as Total_NotDetermined,
COUNT(*) Total
from violations v
group by v.country, v.site
这个工程Oracle数据库中,但是当我使用JPA/Hibernate的我越来越:
ERROR [PARSER] line 1:311: unexpected token: total
ERROR [PARSER] line 1:375: unexpected token: ON
我问,因为我需要实现一些简单的统计根据一个表中的数据“违规”
以下是我的想法:
我需要连接两个表,并从第二个表计出现一些值来实现类似的统计数据表的效果,这将有列:
结果表:
- 国家VARCHAR(20),
- 站点VARCHAR(20),
- suspected_violation长,
- confirmed_violation长,
- confirmed_no_vio特征研长,
- not_determined长,
- 总长
我的结果表需要有前两列(contry与本站)来自第一表“违规”和未来5列将包含数字(计数)在来自状态表的每个可能的id值中的“Violations”中发生的status_id。
所以,我有两个表:违规和状态。
违规:
- ID长,
- 国家VARCHAR(20),
- 网站VARCHAR(20),
- STATUS_ID长,< - 这是在状态的状态标识表。
- ...其他列在这种情况下
状态并不重要:
- ID长,其分别对应的字符串值
- 状态长 列“身份”具有值(1-4):涉嫌违反(1),确认冲突(2),确认无冲突(3)中,未测定(4)
在我的结果是加入具有表,该表应包含列:
- 从违规表:“国家”和“网站”
- 从状态表:“涉嫌违反”,“确认冲突”,“确认不违规”,“未确定”,“总”(其中本列是违规表中出现的计数器)。
更新:据我所知现在没有必要使用连接,查询可以只在一个表上运行。
你能告诉我在JPA/Hibernate中做什么的正确方法是什么?
在JPA中,您可以使用createNativeQuery – Eelke 2013-03-11 20:25:53