Toa*_*Dao 9 oracle spring hibernate jpa spring-boot
所以今天我遇到了一个问题,@Formula 没有按我的预期工作。让我们说:
数据库
year | X | Y
-----+-----+-----
2010 | A | 10
2011 | A | 20
2011 | B | 99
2009 | C | 30
2010 | C | 40
Run Code Online (Sandbox Code Playgroud)
我想获得“Y”最高的年份并按“X”分组,所以我编写了这样的查询
SELECT year
FROM (SELECT
year,
MAX(y) OVER (PARTITION BY x ) max_y
FROM TableB) q
WHERE year = '2011' and x = 'A';
Run Code Online (Sandbox Code Playgroud)
所以结果是
year |
-----+
2011 |
Run Code Online (Sandbox Code Playgroud)
然后我想在实体中使用它,所以我用 @Formula 创建实体
@Formula("(SELECT year FROM (SELECT b.year, MAX(b.y) OVER(PARTITION BY b.x) max_y FROM TableB b) q WHERE year = '2011' AND x = 'A')")
private String yearWithHighestScore;
Run Code Online (Sandbox Code Playgroud)
但 Hibernate 会处理成:
(select entity0_.year as year1_8_
from (select b.year as name, max(b.y) over(partition by b.year) entity0_.max_y from TableB b) entity0_.q
where entity0_.year=? and entity0_.x=?) as formula0_1_
Run Code Online (Sandbox Code Playgroud)
您会看到 Hibernate 将其转换为“entity0_.max_y”,这是不正确的,因为 max_y 不是表 TableB 的列;它只是计算列的别名
我的问题:我们可以有什么办法告诉 Hibernate 它是列的别名,而不是列名本身吗?
谢谢
别名名称前加上“_”前缀:
@Formula("(SELECT year FROM (SELECT b.year, MAX(b.y) OVER(PARTITION BY b.x) _max_y FROM TableB b) _q WHERE year = '2011' AND x = 'A')")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1788 次 |
| 最近记录: |