在连接上设置 H2 架构
Set H2 schema on connection
我正在为我们的 oracle 生产数据库配置一个 h2 测试数据库。所有 table 都属于架构 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 statement: SET SCHEMA xxx [90079-186]
没有 SCHEMA=xxx
,每当 Hibernate 尝试 运行 带有连接的查询时,我都会收到错误消息,因为它不会将模式添加到 table 名称之前。它在生产中使用我们的 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
在连接上创建方案。
这里有一些信息
Hibernate hbm2ddl.auto possible values and what they do?
此连接字符串有效: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");
我正在为我们的 oracle 生产数据库配置一个 h2 测试数据库。所有 table 都属于架构 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 statement: SET SCHEMA xxx [90079-186]
没有 SCHEMA=xxx
,每当 Hibernate 尝试 运行 带有连接的查询时,我都会收到错误消息,因为它不会将模式添加到 table 名称之前。它在生产中使用我们的 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
在连接上创建方案。
这里有一些信息 Hibernate hbm2ddl.auto possible values and what they do?
此连接字符串有效: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");