You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

共享主键双向一对一映射场景下指定Schema导致表创建失败的问题

共享主键双向一对一映射场景下指定Schema导致表创建失败的问题

看起来问题的核心很明确——H2数据库里还不存在名为company的Schema,而Hibernate默认不会自动帮你创建这个Schema,所以执行建表DDL时就抛出了"Schema 'COMPANY' not found"的错误。不用schema属性时能正常运行,是因为默认使用了H2的默认Schema(一般是PUBLIC),自然不存在找不到的问题。

下面给你两个可行的解决方案,任选其一即可:

方案一:通过数据源URL初始化创建Schema

直接在H2的连接URL里添加初始化语句,让数据库启动时自动检查并创建companySchema(如果不存在的话)。修改application.properties里的数据源配置:

spring.datasource.url=jdbc:h2:mem:banco;INIT=CREATE SCHEMA IF NOT EXISTS company;

这个方式比较直接,H2启动时会先执行CREATE SCHEMA IF NOT EXISTS company这条SQL,确保Schema存在后再进行后续的表创建操作。

方案二:配置Hibernate自动创建Schema

通过Hibernate的参数配置,让它在执行DDL时自动创建目标Schema。在application.properties里添加以下配置:

# 保留已有的JPA配置,新增下面两个参数
spring.jpa.properties.hibernate.default_schema=company
spring.jpa.properties.hibernate.schema_update.create_schema=true
  • hibernate.default_schema指定默认使用的Schema,和你实体类@Table里的schema属性保持一致;
  • hibernate.schema_update.create_schema=true会让Hibernate在更新Schema时自动创建不存在的Schema。

额外注意事项

  1. 你的双向一对一共享主键映射配置是正确的:ServiceJpa用@PrimaryKeyJoinColumn,UserJpa用@MapsId配合mappedBy,这个逻辑没问题,只要Schema存在就能正常生成表结构。
  2. 用H2控制台查看表时,记得在登录界面的「Schema」输入框里填写company,否则默认会进入PUBLICSchema,看不到你创建的表。

备注:内容来源于stack exchange,提问作者Rebeca Maria Fialho Camilo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 12:38:16