jdbcsqlsyntaxerroreexception架构未找到



我的@SpringBootTest@Sql({"classpath:create_tables_views.sql"})注释

create_tables_views.sql内第一行为

DROP VIEW IF EXISTS my_schema.my_view;

当我尝试运行我的@SpringBootTest时,我得到以下异常:

Caught exception while invoking 'beforeTestMethod' callback on TestExecutionListener [org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@1e0f9063] for test method [void ...] and test instance [...]
org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #1 of class path resource [create_tables_views.sql]: DROP VIEW IF EXISTS my_schema.my_view; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Schema "MY_SCHEMA" not found;

我错过了什么?


更新1:

在这里添加更多细节以增加清晰度:这就是我的类的注释方式

@ActiveProfiles("test") // (application-test.yml is currently empty)
@AutoConfigureTestDatabase // (so yes, it's spinning up a brand new H2 instance each time)
@AutoConfigureWebTestClient
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@Sql({"classpath:create_tables_views.sql"})

同样,在引导时,我在日志消息中看到:

16:12:08.489 INFO  [main] o.s.j.d.e.EmbeddedDatabaseFactory: Starting embedded database: url='jdbc:h2:mem:9af3a13a-91b3-47ff-a85d-8488d2329a53;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false', username='sa'

因为初始SQL命令是DROP VIEWIF EXISTSmy_schema.my_view;,我不明白为什么它抛出一个异常,如果模式不存在


更新2:

在我的src/main/java文件夹中,我有2个单独的@Configuration文件,其中包含@Bean定义,为2个不同的数据库提供DataSource,LocalContainerEntityManagerFactoryBeanPlatformTransactionManager,一个@Primary一个用于Postgres/Postgis,另一个用于Oracle。

数据库无法判断my_view视图是否存在于模式my_schema中,因为这个模式不存在.

命令DROP VIEW IF EXISTS首先为方案my_schema检索元数据,检查给定的视图是否存在,如果存在,则删除它。在您的示例中,它失败是因为该命令无法从模式my_schema检索元数据,因为该模式不存在。

可能是您期望的那样:"检查模式my_schema是否存在。如果它不存在,不要再做任何事情。如果模式存在,检查视图是否存在。只有当视图存在时,才发出命令来删除它。"但事实并非如此。如果模式不存在,则抛出错误。

相关内容

  • 没有找到相关文章

最新更新