Java 在连接上设置H2架构

Java 在连接上设置H2架构,java,oracle,hibernate,h2,Java,Oracle,Hibernate,H2,我正在为oracle生产数据库配置h2测试数据库。所有表格均为模式xxx。我的数据源定义如下: public DataSource dataSource() { JdbcDataSource ds = new JdbcDataSource(); ds.setUrl("jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;MODE=Oracle;TRACE_LEVEL_SYSTEM_OUT=2;INIT=CREATE SCHEMA IF NOT EXISTS x

我正在为oracle生产数据库配置h2测试数据库。所有表格均为模式
xxx
。我的数据源定义如下:

public DataSource dataSource() {
    JdbcDataSource ds = new JdbcDataSource();
    ds.setUrl("jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;MODE=Oracle;TRACE_LEVEL_SYSTEM_OUT=2;INIT=CREATE SCHEMA IF NOT EXISTS xxx;SCHEMA=xxx");
    ds.setUser("xxx");
    ds.setPassword("xxx");
    return ds;
}
使用
SCHEMA=xxx
,我得到一个错误:
由以下原因引起:org.h2.jdbc.JdbcSQLException:SCHEMA“xxx”未找到;SQL语句:设置模式xxx[90079-186]

如果没有
SCHEMA=xxx
,每当Hibernate尝试运行带有联接的查询时,我都会出错,因为它没有在表名前面加上模式。不过,它在生产中使用我们的oracle数据库实现了这一点

编辑: 为了提供更多的见解,我正在从生产中也使用的创建脚本填充数据库:

@Bean
public DataSourceInitializer dataSourceInitializer(final DataSource dataSource) {
    final DataSourceInitializer initializer = new DataSourceInitializer();
    initializer.setDataSource(dataSource);
    initializer.setDatabasePopulator(databasePopulator());
    return initializer;
}

private DatabasePopulator databasePopulator() {
    final ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
    populator.setSeparator(";");
    populator.setCommentPrefix("--");
    populator.addScript(new ClassPathResource("db-schema.sql"));
    populator.addScript(new ClassPathResource("db-init-data.sql"));
    return populator;
}

我建议您使用
hibernate.hbl2ddl.auto=create
创建连接方案

这里有一些信息

这个连接字符串起作用了:
ds.setUrl(“jdbc:h2:mem:testdb;DB\u CLOSE\u DELAY=-1;MODE=Oracle;TRACE\u LEVEL\u SYSTEM\u OUT=2;INIT=CREATE SCHEMA IF NOT EXISTS xxx\;SET SCHEMA xxx”)

您是否已验证架构是否存在?可能区分大小写?它的存在是因为它是使用
INIT=CREATE SCHEMA创建的,如果不存在xxx
。除了导致联接的查询之外,其他一切都正常工作。抱歉,我没有注意到我的DDL脚本具有正确的架构,并且表是在该架构下创建的。唯一的问题是联接正在查找名为
ROLE\u PERMISSION
的表,而不是
xxx.ROLE\u PERMISSION