Тестовый разрыв H2 после перехода на Hibernate 5 - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь перенести существующий проект Spring Data из Hibernate 4 в Hibernate 5. На этом этапе сам проект работает нормально, но некоторые тесты, которые основывались на H2 и ранее работали нормально, теперь ломаются с этой ошибкой:

Caused by: org.h2.jdbc.JdbcSQLException: Schema "SYS" not found; SQL statement:
select name from sys.sequences [90079-193]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
    at org.h2.message.DbException.get(DbException.java:179)
    at org.h2.message.DbException.get(DbException.java:155)
    at org.h2.command.Parser.getSchema(Parser.java:679)
    at org.h2.command.Parser.getSchema(Parser.java:685)
    at org.h2.command.Parser.readTableFilter(Parser.java:1215)
    at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1897)
    at org.h2.command.Parser.parseSelectSimple(Parser.java:2045)
    at org.h2.command.Parser.parseSelectSub(Parser.java:1891)
    at org.h2.command.Parser.parseSelectUnion(Parser.java:1709)
    at org.h2.command.Parser.parseSelect(Parser.java:1697)
    at org.h2.command.Parser.parsePrepared(Parser.java:445)
    at org.h2.command.Parser.parse(Parser.java:317)
    at org.h2.command.Parser.parse(Parser.java:289)
    at org.h2.command.Parser.prepareCommand(Parser.java:254)
    at org.h2.engine.Session.prepareLocal(Session.java:561)
    at org.h2.engine.Session.prepareCommand(Session.java:502)
    at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1203)
    at org.h2.jdbc.JdbcStatement.executeQuery(JdbcStatement.java:73)
    at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:42)
    at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.initializeSequences(DatabaseInformationImpl.java:65)
    at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.<init>(DatabaseInformationImpl.java:59)
    at org.hibernate.tool.schema.internal.Helper.buildDatabaseInformation(Helper.java:132)
    ... 52 more

Вот конфигурация H2:

@Configuration
@Profile("h2")
public class H2Config implements DatabaseConfig {

    @Override
    @Bean
    public DataSource dataSource() {
        return new EmbeddedDatabaseBuilder()
                .setName("h2test")
                .setType(EmbeddedDatabaseType.H2)
                .setScriptEncoding("UTF-8")
                .build();
    }

    @Override
    public Database databaseType() {
        return Database.H2;
    }

    @Override
    public boolean generateSchema() {
        return true;
    }

    @Override
    public Resource[] populateScripts() throws IOException {
        return (new PathMatchingResourcePatternResolver())
                .getResources("classpath:/bootstrap-sql/*.sql");
    }

    @Override
    public Resource[] populateResources() throws IOException {
        return (new PathMatchingResourcePatternResolver()
                .getResources("classpath:/bootstrap-data/*.json"));
    }
}

Возможные решения, которые не сработали:

Попытка установить и / или автоматически создать схему с помощью .setName("h2test;INIT=CREATE SCHEMA IF NOT EXISTS h2test;SCHEMA=h2test") или подобное приводит к ошибкам в связи с тем, что схема все еще не существует, или к ошибке при попытке запроса несуществующей таблицы sequences.

Попытка изменить формат того, как @GeneratedValue в проектеуказан в этом формате, предложенном в документации Hibernate 5 ...

@GeneratedValue( generator = "custom-uuid" )
@GenericGenerator(
        name = "custom-uuid",
        strategy = "org.hibernate.id.UUIDGenerator",
        parameters = {
                @Parameter(
                        name = "uuid_gen_strategy_class",
                        value = "org.hibernate.id.uuid.CustomVersionOneStrategy"
                )
        }
)

... не имеет значения.

...