无Spring的JPA环境新增RealState到MySQL报admin_id无默认值错误
问题根因
报错的核心原因是real_states表的admin_id外键列没有被正确赋值,触发了数据库非空约束。你虽然给Admin对象设置了admin_id,但JPA的外键映射配置不匹配,导致值没有写入到正确的数据库字段中:
RealState实体中@ManyToOne关联Admin的字段没有显式指定@JoinColumn,Hibernate默认生成的外键列名为admin_admin_id(规则为关联属性名+下划线+关联实体主键名),和你数据库表中实际的admin_id列名不一致,导致赋值的Admin ID没有写入到admin_id字段,最终触发无默认值报错。
修复方案
- 补全RealState实体的外键映射配置
在RealState的admin字段上添加@JoinColumn注解,指定外键列名和数据库表一致:
@ManyToOne(cascade = CascadeType.ALL) @JoinColumn(name = "admin_id", nullable = false) // 显式绑定数据库外键列名 private Admin admin;
- 可选优化(避免后续主键冲突)
如果你的数据库中已经预先存在admin_id=1的管理员账号,不需要每次插入房产都新建Admin对象,否则会触发主键重复报错,建议改为先查询已存在的Admin再绑定关系:
// 替换原有new Admin的代码块 Admin admin = em.find(Admin.class, "1"); if (admin == null) { admin = new Admin(); admin.setAdmin_id("1"); admin.setAdmin_name("pepe"); admin.setAdmin_phone("32132"); }
- 表结构校验
确认real_states表的外键列名确实为admin_id,无拼写错误或多余的非空约束。
内容的提问来源于stack exchange,提问作者Clown
相关产品推荐
相关产品推荐

