插入数据时遇Error Code 1364:userid字段无默认值问题求助
插入数据触发MySQL错误码1364:Field 'userid' doesn't have a default value 问题排查
报错信息
java.sql.SQLException: Field 'userid' doesn't have a default value at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130) ~[mysql-connector-j-8.3.0.jar:8.3.0]
实体类代码
@Entity @Table(name = "users") public class Users { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int userId; }
数据库表结构
CREATE TABLE `users` ( `user_id` int NOT NULL AUTO_INCREMENT, `email` varchar(255) DEFAULT NULL, `is_active` bit(1) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, `registration_date` datetime(6) DEFAULT NULL, `user_type_id` int DEFAULT NULL, PRIMARY KEY (`user_id`), UNIQUE KEY `UK_6dotkott2kjsp8vw4d0m25fb7` (`email`), KEY `FK5snet2ikvi03wd4rabd40ckdl` (`user_type_id`), CONSTRAINT `FK5snet2ikvi03wd4rabd40ckdl` FOREIGN KEY (`user_type_id`) REFERENCES `users_type` (`user_type_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
问题原因
实体类属性userId和数据库字段user_id命名不匹配,JPA生成SQL时错误将属性名直接转为userid(未自动驼峰转下划线),而数据库中不存在userid字段,MySQL判定该字段无默认值且未提供插入值,触发1364错误。
解决办法
方法一:显式指定字段映射
在userId属性上添加@Column注解,明确对应数据库的user_id字段:
@Entity @Table(name = "users") public class Users { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "user_id") // 新增此注解 private int userId; }
方法二:开启JPA自动驼峰转下划线
在项目配置文件中设置Hibernate命名策略,让JPA自动将驼峰命名的属性转为下划线分隔的数据库字段:
- 如果是
application.properties:
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy
- 如果是
application.yml:
spring: jpa: hibernate: naming: physical-strategy: org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy
修改后重新执行插入操作,JPA会正确映射到自增的user_id字段,MySQL自动生成字段值,错误即可解决。
内容的提问来源于stack exchange,提问作者Avijit Patra
相关产品推荐
相关产品推荐

