在User实体父类新增字段后Spring登录失败该如何解决?
问题修复方案
语法与配置错误修正
- 修正
@Table注解写法:User类上@Table("users")缺少name属性,要改成@Table(name = "users"),否则部分JPA实现会无法正确映射表名 - 修正HQL语句:HQL基于实体类名查询,你的实体类名为
User,现有HQL写的from user大小写不匹配,改为:@Query(value = "select u from User u where u.username = ?1") public User findByUsername(String username); - 修正原生SQL表名:你配置的数据库表名为
users,原生SQL里写的user和实际表名不匹配,改为:@Query(value = "select * from users u where u.username = ?1",nativeQuery =true) public User findByUsername(String username);
新增字段映射问题修复
父类新增的Date类型字段需要补全映射配置,同时确保数据库同步更新字段:
- 给
created字段添加@Temporal注解指定日期类型,同时补全get/set方法(JPA需要通过getter/setter访问字段):
@MappedSuperclass public abstract class Parent { @Column private String id; // 新增字段 @Column @Temporal(TemporalType.TIMESTAMP) // 根据实际存储的日期类型选择TemporalType.DATE/TIME/TIMESTAMP private Date created; // 补全id、created的get、set方法 public String getId() {return id;} public void setId(String id) {this.id = id;} public Date getCreated() {return created;} public void setCreated(Date created) {this.created = created;} }
- 检查数据库
users表是否已经新增了和created映射的列,列名默认是created,如果字段缺失会导致实体映射失败。
clazz_字段不存在异常修复
这个异常是JPA继承映射时找不到鉴别器列导致的,你已经使用@MappedSuperclass做父类映射还出现该问题,按以下步骤排查:
- 检查
User类是否额外继承了其他标注@Entity的父类,如果是需要按对应继承策略添加鉴别器列配置 - 清理项目编译缓存、重启服务,部分场景下是旧的实体类元数据残留导致的映射异常
内容的提问来源于stack exchange,提问作者try.aaam
相关产品推荐
相关产品推荐

