我正在创建一个Springboot应用程序,我计划与DB2数据库进行生产对话,并与我使用spring application.profiles设置的开发环境中的H2数据库对话。
我的应用程序。属性文件也有设置:
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
,如果设置了,将不会替换";与"_"(如MY_SCHEMA.CAR
与MY_SCHEMA_CAR
).
我需要这个,因为在DB2上,我必须用SELECT * FROM MY_SCHEMA.CAR
这样的模式来前缀表。在H2控制台,这是不需要,我可以做SELECT * FROM CAR
。
然而,我遇到了以下问题:
- 如果我的实体用
@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. - 如果我的实体用
@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