繁体   English   中英

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

[英]Why does hibernate create different column aliases for same query in different JVM instances?

当我在 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 的列别名将不同。

有人有更好的解决方案吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM