【问题标题】:How to save data in H2 database with Spring Data JPA如何使用 Spring Data JPA 将数据保存在 H2 数据库中
【发布时间】:2019-03-31 19:30:24
【问题描述】:

我想使用 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

【问题讨论】:

  • 我的回答有帮助吗?请告诉我,如果不是,我可以提供更多帮助

标签: spring-boot spring-data-jpa h2


【解决方案1】:

问题在于,在测试期间,如果没有适当的事务定义,您创建的任何数据都不会被提交。我的建议是;

  • 将测试 h2 db 与生产 h2 db 分开,两者使用相同非常危险。例如,您可以使用jdbc:h2:mem:test 进行测试,使用jdbc:h2:mem:main 进行生产数据库。

  • 添加spring.jpa.hibernate.ddl-auto=update 用于生产数据库配置,spring.jpa.hibernate.ddl-auto=create-drop 用于测试。因为您不想保持测试数据库持久化。

  • 如果您尝试从测试逻辑提交数据,您需要检查this question

还要能够在会话之间访问h2,您需要使用一个额外的选项,即AUTO_RECONNECT,您可以将它们添加到您的网址吗?

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

【讨论】:

  • 其实我想用JavaFx
  • @RaviDeveloper 即使有或没有JavaFx,这个答案仍然适用,如果你满意,你能接受吗?谢谢=)
  • 在我们的讨论中,我尝试使用 call main 方法,当关闭应用程序时,数据已经丢失。
  • @RaviDeveloper 你尝试过使用AUTO_RECONNECT 吗?
猜你喜欢
  • 2018-07-29
  • 2020-07-22
  • 2021-03-05
  • 1970-01-01
  • 2021-02-25
  • 2022-01-07
  • 2020-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多