gpt4 book ai didi

spring-boot - 如何使用Spring Data JPA将数据保存到H2数据库中

转载 作者:行者123 更新时间:2023-12-05 05:13:58 24 4
gpt4 key购买 nike

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

最佳答案

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

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

  • 为生产数据库配置添加 spring.jpa.hibernate.ddl-auto=updatespring.jpa.hibernate.ddl-auto=create-drop 进行测试。因为您不想保留测试数据库。

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

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

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

关于spring-boot - 如何使用Spring Data JPA将数据保存到H2数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53018866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com