при переходе с hibernate 5.2 на 5.3 hibernate пытается использовать странную последовательность - PullRequest
0 голосов
/ 17 сентября 2018

После обновления с hibernate 5.2.17 до 5.3.6 я получаю эту ошибку:

Caused by: org.h2.jdbc.JdbcSQLException: Schéma "ENHANCED" non trouvé
Schema "ENHANCED" not found; SQL statement:
call next value for enhanced.SequenceStyleGenerator [90079-197]
    at org.h2.engine.SessionRemote.done(SessionRemote.java:623) ~[h2-1.4.197.jar:1.4.197]
    at org.h2.command.CommandRemote.prepare(CommandRemote.java:85) ~[h2-1.4.197.jar:1.4.197]
    at org.h2.command.CommandRemote.<init>(CommandRemote.java:51) ~[h2-1.4.197.jar:1.4.197]
    at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:493) ~[h2-1.4.197.jar:1.4.197]
    at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1247) ~[h2-1.4.197.jar:1.4.197]
    at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:76) ~[h2-1.4.197.jar:1.4.197]
    at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:304) ~[h2-1.4.197.jar:1.4.197]
    at com.mchange.v2.c3p0.impl.NewProxyConnection.prepareStatement(NewProxyConnection.java:567) ~[c3p0-0.9.5.2.jar:0.9.5.2]
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$1.doPrepare(StatementPreparerImpl.java:87) ~[hibernate-core-5.3.6.Final.jar:5.3.6.Final]
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:172) ~[hibernate-core-5.3.6.Final.jar:5.3.6.Final]

поле идентификатора аннотируется следующим образом:

@Id
@GeneratedValue(generator = "enhanced.SequenceStyleGenerator")
@GenericGenerator(
    name = "enhanced.SequenceStyleGenerator", 
    parameters = {
            // this value needs to be used when creating the sequence in "increment-by" clause.
            @Parameter(name = "increment_size", value= "10"),
            // default name : hibernate_sequence
            @Parameter(name = "prefer_sequence_per_entity", value= "false"),
            @Parameter(name = "optimizer", value="pooled")
    },
    strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator")
@Column(name = "ID", nullable = false)
private Long id;

С hibernate 5.2он работает, как и ожидалось, но больше не работает с hibernate 5.3.

Руководство по миграции здесь: https://github.com/hibernate/hibernate-orm/blob/5.3/migration-guide.adoc не ссылаются на какие-либо изменения в генераторе последовательностей.

В чем может быть проблема

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Я обнаружил, что это новое поведение hibernate 5.3:

В методе SequenceStyleGenerator.determineSequenceName этот код был добавлен:

final Boolean preferGeneratorNameAsDefaultName = serviceRegistry.getService( ConfigurationService.class )
            .getSetting( AvailableSettings.PREFER_GENERATOR_NAME_AS_DEFAULT_SEQUENCE_NAME, StandardConverters.BOOLEAN, true );
if ( preferGeneratorNameAsDefaultName ) {
    final String generatorName = params.getProperty( IdentifierGenerator.GENERATOR_NAME );
    if ( StringHelper.isNotEmpty( generatorName ) ) {
        fallbackSequenceName = generatorName;
    }
}

Новое поведение по умолчанию заключается в использованииимя генератора в качестве имени последовательности.Таким образом, существует две возможности перехода с hibernate 5.2 на 5.3:

  • изменить имя генератора на имя последовательности
  • вернуться к hibernate 5.2 - поведение не использовать имя генератораустановив hibernate.model.generator_name_as_sequence_name в false в конфигурации hibernate (или в параметрах генератора)
0 голосов
/ 17 сентября 2018

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

Пожалуйста, ознакомьтесь с разделом 2.6.11 руководства о том, как назвать и параметризовать генераторы: https://docs.jboss.org/hibernate/stable/orm/userguide/html_single/Hibernate_User_Guide.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...