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

时间:2018-11-14 09:43:04

标签: 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]

在春季靴子1.3.2中,它可以正常工作。我认为这与休眠状态从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

2 个答案:

答案 0 :(得分:1)

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

为什么升级时会发生? 我猜想,当您升级Spring-boot时,您也同时升级了MariaDB驱动程序,后一种在创建外部约束方面更加严格。

答案 1 :(得分:0)

通过添加以下内容来解决此问题:

hibernate:
    implicit_naming_strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl