Spring Boot关联保存实体报Cannot add or update a child row外键错误求助
问题根因
你碰到的外键报错核心原因是数据库层面的外键约束方向建反了:
从报错日志可以看出来,当前你的partners表上存在一个名为FK_VERIFY_USER的外键约束,将partners表的主键id关联到了user-token表的id字段。你保存Partner时,关联的VerificationToken还没有生成主键id,自然触发外键约束失败。
而按照你的实体配置逻辑,外键本来应该是存在user-token表的partner_id字段,关联partners表的id,完全是反过来的。
解决步骤
- 先手动删除数据库中
partners表上错误的FK_VERIFY_USER外键约束 - 确认
user-token表上的外键约束正确:user-token.partner_id关联partners.id,约束名可以保留FK_VERIFY_USER - 如果你是用JPA自动生成表结构,建议临时将配置项
spring.jpa.hibernate.ddl-auto改为update,启动项目让Hibernate自动生成正确的约束,避免手动建表出错
补充说明
你当前的实体关联配置、业务层保存逻辑本身是没有问题的:
Partner作为关系被维护端,用mappedBy = "partner"指定关系由VerificationToken的partner字段维护- 配置了
cascade=CascadeType.ALL,保存Partner时会自动级联保存关联的VerificationToken,不需要额外手动保存Token对象
只要修正数据库的外键方向,业务代码就可以正常运行。
内容的提问来源于stack exchange,提问作者Nursultan
相关产品推荐
相关产品推荐

