作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个映射到 SQL View 的实体。我还为它配置了一个 spring 数据 jpa 存储库。当应用程序运行时,一切正常。但是,当我尝试运行使用内存 H2 数据库的测试时,问题就开始了。我怀疑这是因为在H2启动时 View 不存在,它可能被视为一个独立的实体,因此spring boot将其配置为一个独立的内存表。
H2 数据库的配置如下 -
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).build();
}
schema.sql
中测试资源文件夹中的文件 -
CREATE VIEW
my_view
AS
SELECT
column_1,
column_2
FROM
m
INNER JOIN
mu
ON
m.id = mu.m_id
INNER JOIN
u
ON
mu.id = u.mu_id
public interface MyViewRepository extends JpaRepository<MyView, Long> {}
myViewRepository.findAll()
m
,
mu
, 和
u
在此搜索之前,我的测试中的实体使用其相关存储库。
最佳答案
我猜您正在向您的集成或生产环境声明另一个数据源,该环境连接到一个已经创建并声明了预期 View 的数据库。
运行测试并声明您的 @Bean
时您可能应该在应用程序启动之前指明要执行的 sql 是什么。 Spring Boot 创建一个空的 H2 db。
尝试这个:
假设您的 schema.sql
在 src/test/resources
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2)
.addScript("schema.sql")
.build();
}
请注意您的 View 正在引用表
m
和
mu
也应该在同一个脚本或您想要的另一个脚本中声明(您可以根据需要/需要连接尽可能多的 addScript 调用)。
Repository
创建新对象来创建实体的方法这也是正确的,但我从未尝试过,而且我建议你的方式肯定有效。
h2-console
运行测试时检查嵌入 H2 数据库的内容是什么。 .
The following should be true:
- You are developing a web application
- com.h2database:h2 is on the classpath
- You are using Spring Boot’s developer tools
spring.h2.console.enabled = true
在
application.properties
文件
http://domain:port/contextPath/h2-console
中使用 H2 Web 控制台并随时查看内容。
关于sql-server - 如何在 H2 中初始化 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38483213/
我是一名优秀的程序员,十分优秀!