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

Spring防尘套@DataJpaTest H2嵌入式数据库创建架构

张敏达
2023-03-14

我的数据层中有几个实体存储在特定的模式中。例如:

@Entity
@Table(name = "FOO", schema = "DUMMY")
public class Foo {}

我正在尝试设置H2嵌入式数据库,以便对我的数据层进行集成测试。我正在测试中使用DataJpaTest注释来自动配置H2嵌入式数据库。但是,表的创建失败,因为在DB初始化时未创建架构虚拟。

在测试用例中创建表之前,有没有关于如何创建模式的想法?

我尝试使用@Sql(statements=“CREATE SCHEMA IF NOT EXISTS DUMMY”),但没有成功。

此外,我试图设置spring.datasource.url=jdbc: h2: mem: test; INIT=CREATE Schema if Not EXISTS DUMMY在我的test.properties文件中与TestProperty tySource("classpath:test.properties")一起,但这也不起作用。

共有3个答案

令狐凌
2023-03-14

经过几个小时的努力,我找到了一个解决办法。

您可以在application.properties中定义spring.jpa.properties.hibernate.default_schema=DUMMY

然后设置Spring。jpa。属性。冬眠在测试中,默认\u模式=。属性,并与TestPropertySource(“类路径:test.properties”)一起使用

因此,这样就不会创建模式虚拟,而是在默认模式中创建实体。

宦飞
2023-03-14

我想你正在寻找这个注释:

@AutoConfigureTestDatabase(替换=替换。无)

例子:

@DataJpaTest
@AutoConfigureTestDatabase(replace= AutoConfigureTestDatabase.Replace.NONE)
class UserRepoTest {...}
东郭俊楠
2023-03-14

我也有同样的问题,我通过创建模式来解决。包含内容的sql(在资源文件夹中)

<代码>创建架构(如果不存在)

文档可以在这里找到,但恕我直言,缺乏真实示例使其非常复杂。警告:此脚本也在正常(而不是测试)环境中执行。

非强制性,但良好做法是,仅在测试范围内添加h2依赖性

<dependency>
   <groupId>com.h2database</groupId>
   <artifactId>h2</artifactId>
   <scope>test</scope>
</dependency>
 类似资料:
  • 我正在尝试使用spring boot和hibernate。当我使用存储库时,它工作得很好,但我正在尝试使用Hibernate会话来创建DAO,而这个DAO不是事务的一部分。 这是测试代码: 应用Java语言 UserBusinessImpl。java: 用户存储库。Java语言 用户DAO: 当我尝试getCurrentSession()时,它抛出了一个错误。openSession()与我的事务分

  • 我在前端有一个应用程序,我使用角,后端我使用Spring Boot。在我的前端,我必须上传一个CSV文件,在表中插入数据。所以我将数据发送到保存它的后端。我的问题:我有一个类个人与关系@OneTo很多到其他类像comtes。所以当我尝试使用此Rest服务获取所有个人:http://localhost:8080/api/individus时,我有一个解析json数据错误。 这是我的班级个人: 公共类

  • 我试图通过遵循这里的教程,使用Spring boot在Java中创建一个RESTful应用程序。我想修改它,以便可以从URL中提取标识符,并使用它来服务请求。 所以

  • 我在本地系统上创建了一个带有Rest控制器和Oracle的spring boot应用程序,通过IDE它运行良好,mvn build was fine包也很好,但如果我将其作为可执行jar运行,我会得到以下错误。我有申请表。我提供的所有spring的属性。数据源,但这里我得到了错误。请告知。 这是我的pom.xml: 我正在尝试Spring Boot并尝试将其作为可执行的jar运行。

  • 我有一个Spring Boot和嵌入式Mongo DB的项目,我也想查找存储在那里的数据。我学习了本教程https://springframework.guru/spring-boot-with-embedd-mongoDB/

  • 问题内容: 我目前正在使用以下设置在嵌入式数据库上运行测试之前在嵌入式数据库中创建架构 在我的应用程序上下文中 createSchema.sql hibernate属性 我的问题是这是最好的方法。或者我可以在属性中使用其他架构名称吗?或在jdbc:embedded-database元素中设置架构名称 问题答案: 默认情况下,HSQL创建一个称为PUBLIC的架构。来源:HSQL文档 看到模式名称在