我想知道对于给定的 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/