首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在连接时设置H2架构

在连接时设置H2架构
EN

Stack Overflow用户
提问于 2015-03-24 03:39:02
回答 2查看 15.9K关注 0票数 5

我正在为我们的oracle生产数据库配置一个h2测试数据库。所有表都属于模式xxx。我的数据源定义如下:

代码语言:javascript
复制
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 statement: SET SCHEMA xxx [90079-186]

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

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

代码语言:javascript
复制
@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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-25 00:43:57

此连接字符串起作用: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");

票数 13
EN

Stack Overflow用户

发布于 2015-03-24 05:40:12

我建议你应该使用hibernate.hbl2ddl.auto=create来创建连接方案。

这里有一些信息Hibernate hbm2ddl.auto possible values and what they do?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29218921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档