当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring data JPA在H2数据库中保存数据

柯波峻
2023-03-14

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

杨俊茂
2023-03-14

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

>

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

    添加spring。jpa。冬眠ddl auto=update用于生产数据库配置,以及spring。jpa。冬眠ddl auto=为测试创建拖放。因为你不想让测试数据库持久化。

    如果您试图提交来自测试逻辑的数据,您需要检查这个问题

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

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

  •  类似资料:
    • 我的应用程序有3个组件, 1) 一种面向用户的组件,接收请求并将其存储到数据库中。2)一个后端组件,从数据库中读取数据,进行处理并将其发送到外部系统。3) 存储用户输入的数据库 我如何测试流程是这样的:用户输入数据- 注意:我尝试使用ddl auto:update,但它不起作用。

    • 我正在inMemory数据库中插入数据,当插入数据时,我得到了一个问题, 使用boot、JPA、H2db在内存中插入数据的示例程序 > 创建Pojo并使用JPA注释进行注释 > 配置在app.prop:中 在data.sql文件中添加了给定表 为data.sql中提到的转换添加了名称。 在哪里配置;在Springboot中? 波乔 控制器 错误原因:对名为'in memorydatabaseShu

    • 我在用Hibernate。如何配置我的persistence.xml以拥有一个H2内存数据库? 我的坚持。xml是: 但是当我运行我的应用程序时,我收到以下错误:

    • 问题内容: 我是Redis的新手,但是有一个与备份有关的问题。 现在,我有一个实例在Windows服务器上运行。在此实例内部,我目前有一个“作业”,可将数据存储在一个数据库中。我不希望备份这些数据。 我必须创造一份新工作。我的第一个想法是将数据存储在另一个数据库中,但是在同一实例上。然后,我将在此数据库ID上激活RDB备份。 但是,当我阅读redis文档时,会看到以下命令进行备份: 此命令仅备份当

    • 我需要在数据库中按kb保存大小,以便在前端查看,这是我正在使用的控制器。我使用的是Laravel 5.8 所以我的问题是,拉雷维尔是否提供了处理这种情况的任何假象?或者任何其他框架都有更适合问题的功能是什么?

    • 我有一个关于在数据库中存储数据的问题。 我正在应用程序中的一些屏幕上工作:登录屏幕(用户可以访问你的帐户),注册屏幕(用户可以创建一个新帐户),用户提供信息的屏幕(比如“母亲的名字和身高”),以及配置文件屏幕(显示用户提供的信息)。 我在登录屏幕和注册屏幕中没有问题,但是我不知道如何在Firebase数据库中保存用户提供的信息,在用户提供信息的屏幕中。 你们谁能帮我一下吗?我知道我可以使用fire