我有一个棘手的问题:
当我将HQL转换为SQL(使用org.hibernate.hql.spi.QueryTranslator
(时,我得到了一个有效的SQL。Hibernate:解析/翻译HQL FROM部分以获得对类别名、类名它按预期工作!
但是,我的问题是列别名的转换!
HQL到SQL
*)实体HQL:基本
SELECT Base FROM Base Base
导入:
*)实体的SQL:基本
select base0_.iD as id1_0_, base0_.comment as comment2_0_, base0_.creationDate as creation3_0_ from ...
你可以看到我的问题:列的别名不是直观名称:
base0_.creationDate --> creation3_0_
预期:
base0_.creationDate --> creationDate
用例:
- 自动为每个实体创建视图
- 为我们的数据库管理员提供更好的可读性
我已经调试了好几个小时,以找到影响机械性的解决方案。
我希望有人知道如何解决这个问题(whithout hacking(!
我知道这不是一个传统的问题,所以我很高兴有人有主意;-(
谢谢,提前
Andy
您面临的问题被称为Hibernate命名策略。
在这里https://www.baeldung.com/hibernate-naming-strategy关于如何通过实现接口PhysicalNamingStrategy
来自定义生成的列名,您可以找到更深入的解释。
感谢您的帮助,但这不是解决方案,因为现在我可以重命名每个列、表或模式,但不能重命名选择查询中的别名。
我仍然会收到这样的查询:
select base0_.i_d as i_d1_0_, ....
from base base0_
left outer join campaign base0_1_ on base0_.i_d = base0_1_.i_d
但我希望有一个没有这一切的查询";1_ 0";等
select base.i_d as i_d, ....
from base base
left outer join campaign base on base.i_d = campaign.i_d ...
我想使用翻译后的查询为所有实体创建视图:
生成的视图和列
你可以看到,列名不是很有用;-(
没有字符串替换或修改SQL AST,有人知道吗?