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

如何在JHipster中禁用Schema Validation并解决MySQL JSON列构建Docker镜像报错

JHipster相关问题解答

1. 如何在JHipster中禁用Schema Validation?

要禁用JHipster中的Hibernate Schema Validation,你只需要在对应的Spring Boot配置文件里调整JPA/Hibernate的配置项就行,分环境配置会更合理:

  • 如果你想全局禁用(所有环境),可以修改src/main/resources/application.yml:
spring:
  jpa:
    hibernate:
      ddl-auto: none  # 完全关闭Hibernate的Schema自动管理(包括创建、更新、验证)
    properties:
      hibernate:
        schema_validation: false  # 单独禁用Schema验证(如果ddl-auto设为update等仍想保留其他操作的话)
  • 如果只是想在生产环境禁用,就修改src/main/resources/application-prod.yml,添加上述配置即可。

注意:ddl-auto: none会让Hibernate完全不参与Schema的任何自动操作,适合生产环境;如果只是不想验证Schema但还要保留更新功能,可以把ddl-auto设为update,再加上schema_validation: false。

2. 解决MySQL JSON列导致生产打包测试失败的问题

你的问题核心是测试阶段用的H2数据库不兼容MySQL的JSON类型,导致Schema验证失败。这里有两种靠谱的解决办法:

办法一:临时跳过测试阶段(快速解决)

直接在打包命令中添加跳过测试的参数,这样就不会执行测试用例,直接构建Docker镜像:

./mvnw package -Pprod dockerfile:build -DskipTests

办法二:配置H2兼容MySQL JSON类型(长期修复)

如果你不想跳过测试,想让测试用例正常运行,可以修改测试环境的配置文件src/test/resources/application-test.yml,让H2模拟MySQL的行为并支持JSON:

spring:
  datasource:
    url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MySQL;DATABASE_TO_LOWER=TRUE;INIT=CREATE DOMAIN IF NOT EXISTS JSON AS VARCHAR
    driver-class-name: org.h2.Driver
  jpa:
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL57Dialect
        type:
          preferred_json_jdbc_type: VARCHAR

另外,检查你的实体类中JSON列的映射,比如把@Column(columnDefinition = "json")搭配Hibernate的@Type注解使用,提升兼容性:

@Column(columnDefinition = "json")
@Type(type = "json")
private JsonNode abilities;

这样配置后,H2会模拟MySQL的JSON类型处理,测试阶段就能正常通过,之后再打包构建镜像就不会报错了。

内容的提问来源于stack exchange,提问作者James Hao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:59:24