一个 H2 实例上的 2 个数据库
2 databases on the one H2 instance
我有 JPA 存储库和 @Query,它连接来自位于同一服务器上的其他数据库的表。
SELECT id,co.name from Agenc a inner join[other_db_mame].[schema_name].[table_name] co .....
我想编写集成测试来覆盖此查询的流程。
在集成测试中,我使用 H2 DB
我的问题是,如何正确配置 H2 DB 以拥有 2 个 DB 并使此查询有效?
也许有办法,通过脚本创建另一个数据库,或者像这样?
H2 一次只支持直接访问一个数据库,但您可以从其他数据库创建 linked tables 到 tables。
要创建 linked table,您可以使用 CREATE LINKED TABLE
命令:
https://h2database.com/html/commands.html#create_linked_table
CREATE LINKED TABLE targetTableName('', 'jdbcURL', 'username', 'password', 'sourceTableName');
您还可以 link 使用 LINK_SCHEMA
函数的整个架构:
https://h2database.com/html/functions.html#link_schema
CALL LINK_SCHEMA('targetSchemaName', '', 'jdbcURL', 'username', 'password', 'sourceSchemaName');
请注意,H2(以及 SQL 标准)中 fully-qualified table 名称的格式为 catalogName.schemaName.tableName
。 H2 只支持一个目录(名称与数据库名称相同),不能定义额外的目录。 Non-standard -H2 不接受 [identifier]
的语法,除非您使用 MSSQLServer
兼容模式。在这种模式下,您可以使用该语法,但无论如何您都不能有不同的目录名称,因此如果它们在您的应用程序中是固定的,就会有问题。
如果IGNORE_CATALOGS
设置为TRUE
,实际上H2可以忽略指定的目录名称:
https://h2database.com/html/commands.html#set_ignore_catalogs
SET IGNORE_CATALOGS TRUE;
但是如果架构和 table 名称的组合在您的原始配置中不是唯一的,则与 H2 无关。您不能以任何方式在 H2 中创建具有相同架构和 table 名称的不同 table。
我有 JPA 存储库和 @Query,它连接来自位于同一服务器上的其他数据库的表。
SELECT id,co.name from Agenc a inner join[other_db_mame].[schema_name].[table_name] co .....
我想编写集成测试来覆盖此查询的流程。 在集成测试中,我使用 H2 DB 我的问题是,如何正确配置 H2 DB 以拥有 2 个 DB 并使此查询有效? 也许有办法,通过脚本创建另一个数据库,或者像这样?
H2 一次只支持直接访问一个数据库,但您可以从其他数据库创建 linked tables 到 tables。
要创建 linked table,您可以使用 CREATE LINKED TABLE
命令:
https://h2database.com/html/commands.html#create_linked_table
CREATE LINKED TABLE targetTableName('', 'jdbcURL', 'username', 'password', 'sourceTableName');
您还可以 link 使用 LINK_SCHEMA
函数的整个架构:
https://h2database.com/html/functions.html#link_schema
CALL LINK_SCHEMA('targetSchemaName', '', 'jdbcURL', 'username', 'password', 'sourceSchemaName');
请注意,H2(以及 SQL 标准)中 fully-qualified table 名称的格式为 catalogName.schemaName.tableName
。 H2 只支持一个目录(名称与数据库名称相同),不能定义额外的目录。 Non-standard -H2 不接受 [identifier]
的语法,除非您使用 MSSQLServer
兼容模式。在这种模式下,您可以使用该语法,但无论如何您都不能有不同的目录名称,因此如果它们在您的应用程序中是固定的,就会有问题。
如果IGNORE_CATALOGS
设置为TRUE
,实际上H2可以忽略指定的目录名称:
https://h2database.com/html/commands.html#set_ignore_catalogs
SET IGNORE_CATALOGS TRUE;
但是如果架构和 table 名称的组合在您的原始配置中不是唯一的,则与 H2 无关。您不能以任何方式在 H2 中创建具有相同架构和 table 名称的不同 table。