当前位置: 首页 > 知识库问答 >
问题:

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

孙项禹
2023-03-14

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

我的申请。属性文件还具有以下设置:

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

,如果设置,则不会替换“”带有“_”(如带有“MY\u SCHEMA.CAR”的“MY\u SCHEMA.CAR”)。

我需要这个,因为在DB2上,我必须用类似于从我的_模式中选择*的模式作为表的前缀。汽车。在H2控制台中,这是不需要的,我可以从车上选择*。

但是,我遇到以下问题:

  1. 如果我的实体用Table(name=“my\u SCHEMA.CAR”)注释,我会得到DB2 error error com。ibm。db2.jcc。是SqlSyntaxErrorException:DB2-SQL错误:SQLCODE=-551,SQLSTATE=42501,SQLERRMC=MY_USER;为用户MY_模式创建表;MY_模式。汽车,驾驶员=4.29.24。在H2上,这将创建表MY_模式。汽车
  2. 如果我的实体是用Table(name=“CAR”,schema=“my\u schema”)注释的,那么它可以与DB2一起工作,但在H2上,我得到了错误org。h2.jdbc。JdbcSQLSyntaxErrorException:未找到模式“MY\u Schema”;SQL语句:创建表MY_模式。汽车(

我如何解决上面#2中的问题,让它也在我的H2数据库上工作?

共有1个答案

黎浩然
2023-03-14

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

为此,请删除SpringBoot应用程序上的模式。但是,您需要更改JDBC连接URL。附加:当前模式=MY_SCHEMA;以设置默认模式。

例如,当在我的沙盒中连接到DB2时,我使用:

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

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

jdbc:h2:tcp://localhost/~/test;SCHEMA=ECOS
 类似资料:
  • 我正在使用Spring Boot 2。使用Hibernate 5连接不同服务器上的两个不同的MySQL数据库(Bar和Foo)。我试图从REST Controller中的方法列出实体的所有信息(自己的属性和@OneToOne和@ManyToOne关系)。 我已经遵循了几个教程来做到这一点,因此,我能够获得我的数据库(Foo)的所有信息,但是,当检索集时,我总是得到我的辅助数据库(Bar)的异常。如

  • 问题内容: 使用Linux,我想比较两个具有相同架构的SQLite数据库。只会有一些差异。 有没有可以输出这些差异的工具?最好将它们输出到命令行,以便我可以grep / sed它们。 SQLite使用SQL,因此一般的SQL工具也可以使用。 问题答案: 请查看2015年5月7日发布的SQLite版本3.8.10。此版本首次包含 sqldiff.exe 实用程序, 用于计算两个SQLite数据库文件

  • 我在两个不同的数据库上有两个表: db1.1表1 db2.table2 当我使用以下SQL语法“内部联接”这些表时: 我得到了这样的结果: 如何获得这样的结果(DB2上没有状态的消息仍然会出现,但是SUM结果可以是零或空):

  • 我正在做一些基于数据的事情,我需要将一个表从一个模型复制到另一个模型,但我尝试了很多方法都没有效果。有什么办法可以这样做吗?

  • 我正在开发一个基于SAAS的站点,我必须将两个DBs中的两个表连接起来,比如说DB1中的table1和DB2中的table2。我必须使用cakephp中的join从表1和表2获取匹配记录,但它会抛出如下错误: 错误:SQLSTATE[42000]:语法错误或访问冲突:1142 SELECT命令拒绝用户'dbname'@'localhost'访问表'table_name'。 有谁能解释一下如何使用c

  • 问题内容: 我们需要能够运行消耗两个奴隶的詹金斯工作。(或者,两个作业,如果我们可以保证它们同时运行,并且至少有一个可能知道另一个是什么。)这种情况是我们有一个重量级的应用程序,需要针对它进行测试。测试在一台计算机上运行,​​应用程序在另一台计算机上运行。将它们放在同一主机上是不切实际的。 现在,我们有一个Jenkins作业,该作业使用脚本启动专用的应用服务器,安装正确的版本,正确的数据,然后对其