gpt4 book ai didi

java - Hibernate HQL 别名

转载 作者:行者123 更新时间:2023-11-30 08:18:45 30 4
gpt4 key购买 nike

我想知道对于给定的 HQL 查询,生成的 SQL 查询是否始终相同,或者是否会有所不同,尤其是在涉及别名时。我问这个问题是因为我们的 DBA 提示这样一个事实:对于给定的查询,生成的别名可能因应用程序的一次运行而异。感谢您的帮助。

问候,尼古拉斯

最佳答案

Hibernate 必须确保唯一的别名,因为您也可以自连接表,并且根据 Hibernate 源代码,org.hibernate.mapping.Column.getAlias() 方法不这样做允许您覆盖默认的唯一别名策略:

public String getAlias(Dialect dialect) {
final int lastLetter = StringHelper.lastIndexOfLetter( name );
final String suffix = Integer.toString(uniqueInteger) + '_';

String alias = name;
if ( lastLetter == -1 ) {
alias = "column";
}
else if ( name.length() > lastLetter + 1 ) {
alias = name.substring( 0, lastLetter + 1 );
}

boolean useRawName = name.length() + suffix.length() <= dialect.getMaxAliasLength()
&& !quoted && !name.toLowerCase().equals( "rowid" );
if ( !useRawName ) {
if ( suffix.length() >= dialect.getMaxAliasLength() ) {
throw new MappingException( String.format(
"Unique suffix [%s] length must be less than maximum [%d]",
suffix, dialect.getMaxAliasLength() ) );
}
if ( alias.length() + suffix.length() > dialect.getMaxAliasLength() ) {
alias = alias.substring( 0, dialect.getMaxAliasLength() - suffix.length() );
}
}
return alias + suffix;
}

所以你被那些独特的名字困住了。

关于java - Hibernate HQL 别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29282916/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com