Я использую 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 (), и он работает, я вижу вставленного исполнителя).
Я использую 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,