Spring JPA H2和DB2如何指定在两个数据库上工作的表模式

des4xlb0  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(184)

我正在创建一个Springboot应用程序,我计划在生产环境中使用DB2数据库,在开发环境中使用H2数据库,我已经使用springapplication. profiles进行了设置。
我的application.properties文件也有设置:

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

,如果设置了它,则不会将“.”替换为“_”(如在MY_SCHEMA.CAR中将MY_SCHEMA_CAR替换为MY_SCHEMA_CAR)。
在DB2上,我需要使用这个方法,我必须用模式作为表的前缀,例如SELECT * FROM MY_SCHEMA.CAR。在H2控制台中,不需要这样做,我可以只使用SELECT * FROM CAR
但是,我遇到了以下问题:
1.如果我的实体用@Table(name = "MY_SCHEMA.CAR")注解,我会得到DB2错误error com.ibm.db2.jcc.am.SqlSyntaxErrorException:DB2 SQL错误:查询代码= -551,查询状态=42501,查询权限=我的用户;为用户MY_SCHEMA创建表; MY_SCHEMA.CAR,驱动程序=4.29.24。在H2上,这将创建表MY_SCHEMA. CAR。
1.如果我的实体用@Table(name = "CAR", schema = "MY_SCHEMA")进行了注解,那么它可以在DB2上工作,但是在H2上,我会得到错误org.h2.jdbc.JdbcSQLSyntaxErrorException:找不到架构“MY_SCHEMA”; SQL语句:创建表MY_SCHEMA.CAR(...
我如何解决上面#2中的问题,使它也能在我的H2数据库上工作?

zzoitvuj

zzoitvuj1#

一般来说,我不喜欢在应用程序中硬编码默认模式。如果模式因任何原因发生变化,应用程序不需要受到影响。
为此,请删除SpringBoot应用程序上的模式。不过,您需要更改JDBC连接URL。追加:currentSchema=MY_SCHEMA;以设置默认模式。
例如,在连接到沙箱中的DB2时,我用途:

jdbc:db2://192.168.56.218:50000/empusa:currentSchema=ECOS;

H2提供了一个类似的功能。当我连接到我的H2数据库时,我用途:

jdbc:h2:tcp://localhost/~/test;SCHEMA=ECOS

相关问题