Встроенная база данных H2: файл sql не выполняется

Я использую Spring Data JPA со встроенной базой данных H2. У меня два файла sql:

CREATE TABLE SINGER ( ID INT NOT NULL AUTO_INCREMENT , FIRST_NAME VARCHAR ( 60 ) NOT NULL , LAST_NAME VARCHAR ( 60 ) NOT NULL , BIRTH_DATE DATE , CONSTRAINT UQ_SINGER UNIQUE ( FIRST_NAME , LAST_NAME ), PRIMARY KEY ( ID ) ); CREATE TABLE ALBUM ( ID INT NOT NULL AUTO_INCREMENT , SINGER_ID INT , TITLE VARCHAR ( 100 ) NOT NULL , RELEASE_DATE DATE , CONSTRAINT UQ_ALBUM UNIQUE ( TITLE ), CONSTRAINT FK_ALBUM FOREIGN KEY ( SINGER_ID ) ССЫЛКИ SINGER ( ID ), ПЕРВИЧНЫЙ КЛЮЧ ( ID ) );

INSERT INTO SINGER (FIRST_NAME, LAST_NAME, BIRTH_DATE) VALUES ('John', 'Mayer', '1977-10-16');
INSERT INTO SINGER (FIRST_NAME, LAST_NAME, BIRTH_DATE) VALUES ('Eric', 'Clapton', '1945-03-30');
INSERT INTO SINGER (FIRST_NAME, LAST_NAME, BIRTH_DATE) VALUES ('Jorn', 'Butler', '1975-04-01');

INSERT INTO ALBUM (SINGER_ID, TITLE, RELEASE_DATE) VALUES (1, 'The Search For Everything', '2017-01-20');
INSERT INTO ALBUM (SINGER_ID, TITLE, RELEASE_DATE) VALUES (1, 'Battle Studies', '2009-11-17');
INSERT INTO ALBUM (SINGER_ID, TITLE, RELEASE_DATE) VALUES (2, 'From The Cradle', '1994-09-13');

@Bean public DataSource dataSource () { try { EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder (); return builder . setType ( EmbeddedDatabaseType . H2 ) . addScripts ( "db / schema.sql" , "db / data.sql" ) . build (); } catch ( Exception ex ) { log . ошибка ( «Невозможно создать DataSource» , ex ); return null ; } }

schema.sql

Конфигурация базы данных:

data.sql

Проблема в том, что: schema.sql выполняется пока нет. Все тесты (найти все данные, найти по идентификаторам, вставить, обновить, удалить) успешно пройденыINFO [main] org.springframework.jdbc.datasource.init.ScriptUtils:510 - Executed SQL script from class path resource [db/schema.sql] in 47 ms. INFO [main] org.springframework.jdbc.datasource.init.ScriptUtils:444 - Executing SQL script from class path resource [db/data.sql] DEBUG [main] org.springframework.jdbc.datasource.init.ScriptUtils:476 - 1 returned as update count for SQL: INSERT INTO SINGER (FIRST_NAME, LAST_NAME, BIRTH_DATE) VALUES ('John', 'Mayer', '1977-10-16') DEBUG [main] org.springframework.jdbc.datasource.init.ScriptUtils:476 - 1 returned as update count for SQL: INSERT INTO SINGER (FIRST_NAME, LAST_NAME, BIRTH_DATE) VALUES ('Eric', 'Clapton', '1945-03-30') DEBUG [main] org.springframework.jdbc.datasource.init.ScriptUtils:476 - 1 returned as update count for SQL: INSERT INTO SINGER (FIRST_NAME, LAST_NAME, BIRTH_DATE) VALUES ('Jorn', 'Butler', '1975-04-01') DEBUG [main] org.springframework.jdbc.datasource.init.ScriptUtils:476 - 1 returned as update count for SQL: INSERT INTO ALBUM (SINGER_ID, TITLE, RELEASE_DATE) VALUES (1, 'The Search For Everything', '2017-01-20') DEBUG [main] org.springframework.jdbc.datasource.init.ScriptUtils:476 - 1 returned as update count for SQL: INSERT INTO ALBUM (SINGER_ID, TITLE, RELEASE_DATE) VALUES (1, 'Battle Studies', '2009-11-17') DEBUG [main] org.springframework.jdbc.datasource.init.ScriptUtils:476 - 1 returned as update count for SQL: INSERT INTO ALBUM (SINGER_ID, TITLE, RELEASE_DATE) VALUES (2, 'From The Cradle', '1994-09-13') INFO [main] org.springframework.jdbc.datasource.init.ScriptUtils:510 - Executed SQL script from class path resource [db/data.sql] in 16 ms. DEBUG [main] org.springframework.jdbc.datasource.DataSourceUtils:340 - Returning JDBC Connection to DataSource

бревна

data.sql

Кажется, что data.sqlон выполнен успешно, но я не вижу данных (в методах тестирования), пока я вставляю их.

UPDATE: У меня есть следующие методы тестирования (все они успешно проходят, но в testFindAll () я не вижу никаких данных):

@Test
void testFindAll() {
    List<Singer> singers = singerRepository.findAll();
    assertNotNull(singers);
    displayAllSingers(singers);
}

@Test
void testInsert() {
    Singer singer = createSinger();
    singerRepository.insert(singer);
    assertNotNull(singer.getId());

    displayAllSingers(singerRepository.findAll());
}

Вам не нужно беспокоиться о реализации SingerRepository, он работает правильно (в testInsert () вы можете видеть singerRepository.findAll (), и он работает, я вижу вставленного исполнителя).

java,spring-data-jpa,h2,

0

Ответов: 0

Встроенная база данных H2: файл sql не выполняется

Я использую Spring Data JPA со встроенной базой данных H2. У меня два файла sql:

CREATE TABLE SINGER ( ID INT NOT NULL AUTO_INCREMENT , FIRST_NAME VARCHAR ( 60 ) NOT NULL , LAST_NAME VARCHAR ( 60 ) NOT NULL , BIRTH_DATE DATE , CONSTRAINT UQ_SINGER UNIQUE ( FIRST_NAME , LAST_NAME ), PRIMARY KEY ( ID ) ); CREATE TABLE ALBUM ( ID INT NOT NULL AUTO_INCREMENT , SINGER_ID INT , TITLE VARCHAR ( 100 ) NOT NULL , RELEASE_DATE DATE , CONSTRAINT UQ_ALBUM UNIQUE ( TITLE ), CONSTRAINT FK_ALBUM FOREIGN KEY ( SINGER_ID ) ССЫЛКИ SINGER ( ID ), ПЕРВИЧНЫЙ КЛЮЧ ( ID ) ) ;

INSERT INTO SINGER (FIRST_NAME, LAST_NAME, BIRTH_DATE) VALUES ('John', 'Mayer', '1977-10-16');
INSERT INTO SINGER (FIRST_NAME, LAST_NAME, BIRTH_DATE) VALUES ('Eric', 'Clapton', '1945-03-30');
INSERT INTO SINGER (FIRST_NAME, LAST_NAME, BIRTH_DATE) VALUES ('Jorn', 'Butler', '1975-04-01');

INSERT INTO ALBUM (SINGER_ID, TITLE, RELEASE_DATE) VALUES (1, 'The Search For Everything', '2017-01-20');
INSERT INTO ALBUM (SINGER_ID, TITLE, RELEASE_DATE) VALUES (1, 'Battle Studies', '2009-11-17');
INSERT INTO ALBUM (SINGER_ID, TITLE, RELEASE_DATE) VALUES (2, 'From The Cradle', '1994-09-13');

@Bean public DataSource dataSource () { try { EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder (); return builder . setType ( EmbeddedDatabaseType . H2 ) . addScripts ( "db / schema.sql" , "db / data.sql" ) . build (); } catch ( Exception ex ) { log . ошибка ( «Невозможно создать DataSource» , ex ); return null ; } }

schema.sql

Конфигурация базы данных:

data.sql

Проблема в том, что: schema.sql выполняется пока нет. Все тесты (найти все данные, найти по идентификаторам, вставить, обновить, удалить) успешно пройденыINFO [main] org.springframework.jdbc.datasource.init.ScriptUtils:510 - Executed SQL script from class path resource [db/schema.sql] in 47 ms. INFO [main] org.springframework.jdbc.datasource.init.ScriptUtils:444 - Executing SQL script from class path resource [db/data.sql] DEBUG [main] org.springframework.jdbc.datasource.init.ScriptUtils:476 - 1 returned as update count for SQL: INSERT INTO SINGER (FIRST_NAME, LAST_NAME, BIRTH_DATE) VALUES ('John', 'Mayer', '1977-10-16') DEBUG [main] org.springframework.jdbc.datasource.init.ScriptUtils:476 - 1 returned as update count for SQL: INSERT INTO SINGER (FIRST_NAME, LAST_NAME, BIRTH_DATE) VALUES ('Eric', 'Clapton', '1945-03-30') DEBUG [main] org.springframework.jdbc.datasource.init.ScriptUtils:476 - 1 returned as update count for SQL: INSERT INTO SINGER (FIRST_NAME, LAST_NAME, BIRTH_DATE) VALUES ('Jorn', 'Butler', '1975-04-01') DEBUG [main] org.springframework.jdbc.datasource.init.ScriptUtils:476 - 1 returned as update count for SQL: INSERT INTO ALBUM (SINGER_ID, TITLE, RELEASE_DATE) VALUES (1, 'The Search For Everything', '2017-01-20') DEBUG [main] org.springframework.jdbc.datasource.init.ScriptUtils:476 - 1 returned as update count for SQL: INSERT INTO ALBUM (SINGER_ID, TITLE, RELEASE_DATE) VALUES (1, 'Battle Studies', '2009-11-17') DEBUG [main] org.springframework.jdbc.datasource.init.ScriptUtils:476 - 1 returned as update count for SQL: INSERT INTO ALBUM (SINGER_ID, TITLE, RELEASE_DATE) VALUES (2, 'From The Cradle', '1994-09-13') INFO [main] org.springframework.jdbc.datasource.init.ScriptUtils:510 - Executed SQL script from class path resource [db/data.sql] in 16 ms. DEBUG [main] org.springframework.jdbc.datasource.DataSourceUtils:340 - Returning JDBC Connection to DataSource

бревна

data.sql

Кажется, что data.sqlон выполнен успешно, но я не вижу данных (в методах тестирования), пока я вставляю их.

UPDATE: У меня есть следующие методы тестирования (все они успешно проходят, но в testFindAll () я не вижу никаких данных):

@Test
void testFindAll() {
    List<Singer> singers = singerRepository.findAll();
    assertNotNull(singers);
    displayAllSingers(singers);
}

@Test
void testInsert() {
    Singer singer = createSinger();
    singerRepository.insert(singer);
    assertNotNull(singer.getId());

    displayAllSingers(singerRepository.findAll());
}

Вам не нужно беспокоиться о реализации SingerRepository, он работает правильно (в testInsert () вы можете видеть singerRepository.findAll (), и он работает, я вижу вставленного исполнителя).

00Java, весна-данных JPA, h2,
Похожие вопросы