当我监视在我的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解释计划,因为它被锁定到特定的查询。
最佳答案
我认为这是甲骨文的错误。别名不会更改查询!
我们的解决方案是persistence.xml
<exclude-unlisted-classes>true</exclude-unlisted-classes>
所以hibernate在重启后会给出相同的别名!
通过开发下一个应用程序版本:必须在persistence.xml中保持实体顺序。如果在现有“b”之前插入“a”实体,则b和b的s列别名将不同。
有人有更好的解决办法吗?