Java Hibernate HQL别名

Java Hibernate HQL别名,java,hibernate,orm,hql,alias,Java,Hibernate,Orm,Hql,Alias,我想知道对于给定的HQL查询,生成的SQL查询是否总是相同的,或者是否可以变化,特别是在别名方面。 我之所以问这个问题,是因为我们的DBA抱怨,对于给定的查询,生成的别名可能会因应用程序的不同运行而不同。 谢谢你的帮助 问候,, NicolasHibernate必须确保唯一别名,因为您也可以自加入表,并且根据Hibernate源代码,org.Hibernate.mapping.Column.getAlias()方法不允许您覆盖默认的唯一别名策略: public String getAlias(D

我想知道对于给定的HQL查询,生成的SQL查询是否总是相同的,或者是否可以变化,特别是在别名方面。 我之所以问这个问题,是因为我们的DBA抱怨,对于给定的查询,生成的别名可能会因应用程序的不同运行而不同。 谢谢你的帮助

问候,,
Nicolas

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;
}
公共字符串getAlias(方言){
final int lastLetter=StringHelper.lastIndexOfLetter(名称);
最后一个字符串后缀=Integer.toString(uniqueInteger)+'';
字符串别名=名称;
如果(lastLetter==-1){
alias=“column”;
}
else if(name.length()>lastLetter+1){
别名=名称.子字符串(0,最后一个字母+1);
}
布尔useRawName=name.length()+后缀.length()=方言.getMaxAliasLength()){
抛出新的MappingException(String.format(
“唯一后缀[%s]长度必须小于最大值[%d]”,
后缀,方言.getMaxAliasLength());
}
if(alias.length()+后缀.length()>方言.getMaxAliasLength()){
alias=alias.substring(0,方言.getMaxAliasLength()-后缀.length());
}
}
返回别名+后缀;
}
所以你只能用那些独特的名字