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



我正在创建一个Springboot应用程序,我计划与DB2数据库进行生产对话,并与我使用spring application.profiles设置的开发环境中的H2数据库对话。

我的应用程序。属性文件也有设置:

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

,如果设置了,将不会替换";与"_"(如MY_SCHEMA.CARMY_SCHEMA_CAR).

我需要这个,因为在DB2上,我必须用SELECT * FROM MY_SCHEMA.CAR这样的模式来前缀表。在H2控制台,这是不需要,我可以做SELECT * FROM CAR

然而,我遇到了以下问题:

  1. 如果我的实体用@Table(name = "MY_SCHEMA.CAR")注释,我得到DB2错误com.ibm.db2.jcc.am错误。sqlsyntaxerroreexception: DB2 SQL Error:Sqlcode =-551, sqlstate =42501, sqlerrmc = my_userMY_SCHEMA; MY_SCHEMA。车,司机= 4.29.24。在H2上,这将创建表MY_SCHEMA.CAR.
  2. 如果我的实体用@Table(name = "CAR", schema = "MY_SCHEMA")注释,它与DB2一起工作,但在H2上,我得到错误org.h2.jdbc。MY_SCHEMA"不发现;SQL语句:创建表MY_SCHEMA汽车(…

我如何解决上面#2中的问题,以使其在我的H2数据库上工作?

一般来说,我不喜欢在应用程序中硬编码默认模式。如果模式因任何原因改变,应用程序不需要受到影响。

要做到这一点,请删除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

相关内容

  • 没有找到相关文章

最新更新