Я хотел бы знать, будет ли при заданном запросе HQL сгенерированный SQL-запрос всегда совпадать или если он может меняться, особенно когда дело касается псевдонимов. Я задаю этот вопрос, потому что наш администратор баз данных жалуется на то, что для данного запроса сгенерированные псевдонимы могут варьироваться от одного запуска приложения к другому. Спасибо за вашу помощь.
С уважением, Николас
Hibernate должен обеспечивать уникальные псевдонимы, так как вы можете самостоятельно присоединиться к таблице, а также в соответствии с исходным кодом org.hibernate.mapping.Column.getAlias()
метод 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;
}
Таким образом, вы застряли с этими уникальными именами.