HQL到SQL的转换-为列定义有意义的别名



我有一个棘手的问题:

当我将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

用例:

  1. 自动为每个实体创建视图
  2. 为我们的数据库管理员提供更好的可读性

我已经调试了好几个小时,以找到影响机械性的解决方案。

我希望有人知道如何解决这个问题(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,有人知道吗?

相关内容

最新更新