Hibernate创建User实体报IdentifierGenerationException异常求助
问题原因及解决方案
1. 实体类缺失无参构造方法
Hibernate底层通过反射实例化@Entity标注的实体类,强制要求实体类提供公共无参构造方法。你当前的User类仅自定义了带参构造方法,Java编译器不会自动生成默认无参构造,Hibernate初始化实体实例时无法正确映射字段,会识别到主键loginU为空。
修复方案:在User类中添加无参构造:
public User() { }
2. 未显式声明主键生成策略(可选但推荐)
String类型的主键Hibernate默认会采用assigned生成策略(即要求业务侧手动赋值),但为了规避不同Hibernate版本默认策略的差异,建议在@Id注解下显式声明生成策略,避免歧义:
@Id @Column(name = "loginU") @GeneratedValue(strategy = GenerationType.ASSIGNED) private String loginU;
3. 缺失主键字段的getter/setter方法
如果你的Hibernate配置默认采用属性访问策略(通过get/set方法读写字段),缺失loginU的getter、setter方法会导致Hibernate无法读取到你已经赋值的主键值,也会触发该报错。建议补充所有成员字段的getter和setter方法。
内容的提问来源于stack exchange,提问作者Aikkyo
相关产品推荐
相关产品推荐

