我将 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/