java - 在连接上设置 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 xxx;SCHEMA=xxx");
    ds.setUser("xxx");
    ds.setPassword("xxx");
    return ds;
}

使用 SCHEMA=xxx,我得到一个错误:Caused by: org.h2.jdbc.JdbcSQLException: Schema "xxx"not found; SQL语句:SET SCHEMA 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;
}

最佳答案

此连接字符串有效:ds.setUrl("jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;MODE=Oracle;TRACE_LEVEL_SYSTEM_OUT=2;INIT=CREATE SCHEMA IF NOT EXISTS xxx\\;SET SCHEMA xxx");

关于java - 在连接上设置 H2 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29218921/

相关文章:

SQL查询球员平均热连胜持续时间

java - 为什么 session.createCriteria(classtype).list() 返回的对象比列表中的对象多?

带有 Hibernate 的 SPRING JPA 更新所有实体实例,即使使用一个实体调用保存也是如此

java - 文件处理使用struts2 + hibernate3 + MySql

java - 如何处理 Spark rdd 生成上的 CSV 文件列?

java - spring远程分区策略如何在不同机器上启动slave

java - HashMap内部Hashmap打印涉及字符串?

java - 在适配器回收器 View 和另一个类之间共享数据

database - Oracle 表中的空白字段(即列)是否还会占用磁盘空间?

java - 多个键和值