org.h2.jdbc.JdbcSQLException: Schema “information_schema” not found;

308
16 апреля 2019, 06:10

Решил гонять тесты через H2. Аннотации над абстрактным тестом, от которого наследуются все остальные:

@RunWith(SpringRunner.class)
@SpringBootTest
@EnableJpaRepositories
@ActiveProfiles("dev")
public abstract class AbstractTest {
}

В test/resources лежит файл application-dev.yml, который должен подхватываться при активном профиле "dev":

spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:file:~/streamcast;DB_CLOSE_ON_EXIT=FALSE;IFEXISTS=TRUE;DB_CLOSE_DELAY=-1;
    username: root
    password: root
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
    properties:
      hibernate.dialect: org.hibernate.dialect.H2Dialect
      hibernate.temp.use_jdbc_metadata_defaults: false
  profiles:
    active: dev
server:
  port: 8080

Выдаёт следующий exception:

Caused by: org.h2.jdbc.JdbcSQLException: Схема "information_schema" не найдена
Schema "information_schema" not found; SQL statement:
select SEQUENCE_CATALOG, SEQUENCE_SCHEMA, SEQUENCE_NAME, INCREMENT from information_schema.sequences [90079-197]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
    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:701)
    at org.h2.command.Parser.getSchema(Parser.java:707)
    at org.h2.command.Parser.readTableFilter(Parser.java:1388)
    at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:2138)
    at org.h2.command.Parser.parseSelectSimple(Parser.java:2287)
    at org.h2.command.Parser.parseSelectSub(Parser.java:2133)
    at org.h2.command.Parser.parseSelectUnion(Parser.java:1946)
    at org.h2.command.Parser.parseSelect(Parser.java:1919)
    at org.h2.command.Parser.parsePrepared(Parser.java:463)
    at org.h2.command.Parser.parse(Parser.java:335)
    at org.h2.command.Parser.parse(Parser.java:307)
    at org.h2.command.Parser.prepareCommand(Parser.java:278)
    at org.h2.engine.Session.prepareLocal(Session.java:611)
    at org.h2.engine.Session.prepareCommand(Session.java:549)
    at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1247)
    at org.h2.jdbc.JdbcStatement.executeQuery(JdbcStatement.java:78)
    at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorH2DatabaseImpl.extractMetadata(SequenceInformationExtractorH2DatabaseImpl.java:37)
    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)
    ... 77 more

Дело в настройках datasource? Подскажите, что не так?

Answer 1

Вам необходимо создать таблицы при помощи хайбернейта во время запуска тестов, указав следующее проперти:

 spring.jpa.hibernate.ddl-auto=create

Или можно сделать это самому, создав файл schema.sql с необходимыми таблицами в папке resources.

P.S так же советую использовать аннотацию @DataJpaTest вместо @SpringBootTest , если вы собираетесь тестировать только persistence. @SpringBootTest поднимает весь контекст, включая контроллеры, сервисы, стандартные спринговские бины и т.д.

READ ALSO
Запись в параметризованный массив Java

Запись в параметризованный массив Java

Имеется класс-обертка для параметризованного массива:

218
не отрабатывает авторизацию

не отрабатывает авторизацию

Реализую регистрацию и авторизацию пользователей для дальнейшего использования, с регистрацией проблем нем, все данные уходят в БД, а вот...

220
Java Selenium запись видео

Java Selenium запись видео

На сайте есть анимационный блок, анимация которого производится с применением html5, css, и jsМожно ли как то записать эту анимацию в gif? Использую...

199
RemoteServiceException: Bad notification for startForeground

RemoteServiceException: Bad notification for startForeground

Сейчас для того чтобы опубликовать обновление приложения в PlayМаркет, требуется API не ниже 26Иначе выдает ошибку:

282