java - 将 Spring Boot 1.3.2 升级到 1.4.1 后,Hibernate hbm2ddl (ddl-auto) 失败

标签 java spring hibernate spring-boot

我将 Spring Boot 从 1.3.2 升级到 1.4.1 时遇到了这个问题。

Caused by: org.mariadb.jdbc.internal.util.dao.QueryException: Cannot add or update a child row: a foreign key constraint fails (`miq`.`#sql-66f_2a0`, CONSTRAINT `FK8py7anxsihgwdy7bkibosch86` FOREIGN KEY (`market_region_id`) REFERENCES `market_region` (`id`))
Query is : alter table miq.office add constraint FK8py7anxsihgwdy7bkibosch86 foreign key (market_region_id) references miq.market_region (id)
    at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:939) ~[mariadb-java-client-1.4.6.jar!/:na]

在 Spring Boot 1.3.2 中它工作正常。我认为这与hibernate从4升级到5有关。我的application.yml如下:

spring:
  application:
    name: miq-batch
  datasource:
    url: jdbc:mysql://localhost:3306/scdf
    username: root
    password: root
    driverClassName: org.mariadb.jdbc.Driver
    testOnBorrow: true
    validationQuery: SELECT 1
    hikari:
      pool-name: SpringBootHikariCP
  data:
    mongodb:
      host: localhost
      port: 27017
      database: profile      
  jpa:
    hibernate:
      ddl-auto: update
      show_sql: true
    properties:
      hibernate:
        hbm2ddl:
          auto: update
        cache:
          use_second_level_cache: true
          region.factory_class: org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
          use_query_cache: true
          use_collection_cache: true

最佳答案

看起来 MariaDB 阻止您在 miq.office 表上创建外键约束。因此,这是一个数据问题。查看表 miq.office 以查看一条(或多条)记录是否具有未知的 market_region_id(即表 中没有对应的记录)市场_区域)。

为什么升级时会出现这种情况? 我猜当你升级 Spring-boot 时,你也会升级 MariaDB 驱动程序,而后者对于外部约束创建更加严格。

关于java - 将 Spring Boot 1.3.2 升级到 1.4.1 后,Hibernate hbm2ddl (ddl-auto) 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53297108/

相关文章:

java - AbstractTableModel继承设置列标题文本?

java - Android:在按钮上使用九色补丁背景,我无法在文本周围添加任何填充

java - Spring Data JPA 规范中三表连接中允许空集

java - 正则表达式使用分隔符分割文本,但当分隔符位于 () 之间时不分割

java - 通过 Authorize.net 的 eCheck.net API 在 Java 中直接存款

java - 无法通过 Jackson2ObjectMapperBuilder DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT 将空字符串设置为 null

java - 如何在 Spring JMS 连接工厂中配置 weblogic 重新连接策略

java - 刷新引起的延迟初始化错误

java - 无需 Hibernate 的自定义 @Id 生成器

java - String中是否有任何函数可以帮助删除字符串中的所有空格?