为什么hibernate在不同的JVM实例中为同一个查询创建不同的列别名?

时间:2016-08-12 05:26:40

标签: java mysql sql-server oracle hibernate

当我在我的Java应用程序中监视由hibernate生成的SQL查询时,查询中使用的每列都有列别名。但是列别名后缀为不同的JVM实例的不同数字。

例如:

select user0.ID as ID1_276_,
user0.DESCRIPTOR_ID as DESCRIPTOR10_276_,
user0.USER_ID as USER11_276_ 
from CI_USER user0
where ...

但是,当重新启动应用程序时,列别名中的后缀会不断变化。我不确定这些后缀的逻辑或公式究竟是什么,即_276_。有时,相同的查询显示如下内容:

select user0.ID as ID1_144_,
user0.DESCRIPTOR_ID as DESCRIPTOR10_144_,
user0.USER_ID as USER11_144_ 
from CI_USER user0
where ...

只有列别名不断变化。表别名保持不变。有人可以帮助指出hibernate如何在后缀中提出这些数字吗?另外,我可以完全停止这些后缀吗?我想要没有列别名或具有相同列别名的查询。

Oracle中不同列别名导致的副作用之一是无法使用相同的SQL解释计划,因为它已锁定到特定查询。

1 个答案:

答案 0 :(得分:0)

我认为这是Oracle的错误。别名不会更改查询!

我们的解决方案在persistence.xml中 真正 因此,重新启动后,休眠模式将赋予相同的别名!

通过开发下一个应用版本: 您必须将实体顺序保持在persistence.xml中。如果在现有“ B”之前插入“ A”实体,则B和B的列别名将不同。

有更好的解决方案吗?