我正在将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
答案 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