Я пытаюсь перенести существующий проект 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"
)
}
)
... не имеет значения.