Как сохранить данные в базе данных H2 с помощью Spring Data JPA - PullRequest
0 голосов
/ 27 октября 2018

Я хочу создать настольное приложение, использующее JavaFx, Spring Boot и Spring Data JPA с H2 в качестве базы данных.Проблема в том, что я пытаюсь запустить Junit для локального сохранения данных в каталоге, но каждый раз, когда я запускаю Junit, данные теряются.

Мой application.properties файл;

spring.output.ansi.enabled=ALWAYS                    
spring.datasource.url=jdbc:h2:mem:test; 
DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;
spring.datasource.platform=h2
spring.datasource.username = sa
spring.datasource.password =
spring.datasource.driverClassName = org.h2.Driver
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.generate-ddl=true

Мой тестовый пример;

HotelEntity hotelEntity = new HotelEntity(1, "Name", "Password", "MobileNumber", "email");
hotelDao.save(hotelEntity);
System.out.println("Hotel Dao--");
List<HotelEntity> hotelEntities = hotelDao.findAll();
System.out.println(hotelEntities.size());

Он печатает размер списка 1, но когда я снова запускаю тестовый пример, как это

List<HotelEntity> hotelEntities = hotelDao.findAll();
System.out.println(hotelEntities.size());

Он печатает размер списка 0

1 Ответ

0 голосов
/ 14 ноября 2018

Проблема в том, что во время тестов любые созданные вами данные не будут зафиксированы без правильного определения транзакции.Мои предложения:

  • Отдельный тест h2 дБ от производственного h2 дБ, очень опасно использовать одно и то же для обоих.Вы можете использовать jdbc:h2:mem:test для тестирования и jdbc:h2:mem:main для производственной базы данных, например.

  • Добавить spring.jpa.hibernate.ddl-auto=update для конфигурации производственной базы данных и spring.jpa.hibernate.ddl-auto=create-drop для тестирования.Поскольку вы не хотите, чтобы тестовая база данных сохранялась.

  • Если вы пытаетесь зафиксировать данные из тестовой логики, вам нужно проверить этот вопрос

Кроме того, чтобы иметь возможность доступа к h2 между сеансами, вам необходимо использовать дополнительную опцию, а именно AUTO_RECONNECT, вы можете добавить их в свойURL?

spring.datasource.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;AUTO_RECONNECT=TRUE
...