Hibernate HQL псевдонимы

1

Я хотел бы знать, будет ли при заданном запросе HQL сгенерированный SQL-запрос всегда совпадать или если он может меняться, особенно когда дело касается псевдонимов. Я задаю этот вопрос, потому что наш администратор баз данных жалуется на то, что для данного запроса сгенерированные псевдонимы могут варьироваться от одного запуска приложения к другому. Спасибо за вашу помощь.

С уважением, Николас

Теги:
hibernate
orm
hql
alias

1 ответ

1

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;
}

Таким образом, вы застряли с этими уникальными именами.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню