问题描述
在保存一个实体是突然抛出了如下异常, 提示ID值为空:
org.hibernate.exception.GenericJDBCException: Field 'ID' doesn't have a default value
实体类的id
字段在MySQL中定义为自动递增的类型, 持久化层使用Hibernate
进行保存, 定义的注解:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name ="ID",nullable=false,precision=19,scale=0)
public java.lang.Integer getId(){
return this.id;
}
解决方法
后面检查了下代码应该是没有问题, 于是查看表结构, 因为自增型的需要添加AUTO_INCREMENT
关键字, 发现果然是建表时忘记加了, 于是在ID字段后面进行追加:
CREATE TABLE `p_product_package_balance` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID主键',
其他字段...
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='分装节点-物料平衡单 ';
然后重新保存, 可以正常保存.