同时使用Lombok的@Data与@Builder注解为何触发报错?
问题分析与解决方法
这个错误的核心原因是**@Data和@Builder联用时,Lombok生成的全参构造器参数顺序与JPA查询结果的列顺序不匹配**,导致PostgreSQL把字符串类型的邮编(user_postcode)错误地当成时间/日期类型解析,触发类型转换异常。单独使用其中一个注解时,JPA会使用无参构造器+setter方法注入数据,不会出现参数顺序匹配错误的问题。
具体解决办法
显式指定字段与数据库列的映射关系
在实体类的每个字段上添加@Column(name="对应数据库列名")注解,强制JPA按注解匹配列,不受构造器参数顺序影响:@Column(name = "user_postcode") private String userPostcode;手动控制构造器参数顺序
放弃依赖Lombok自动生成全参构造器,手动编写全参构造器,确保参数顺序与数据库表的列顺序完全一致;或者调整实体类字段的定义顺序,使其和数据库列顺序对齐(Lombok的@Builder默认按字段定义顺序生成构造器参数)。补充必要的构造器注解
在实体类上同时添加@NoArgsConstructor和@AllArgsConstructor,配合@Data和@Builder使用,让JPA可以优先选择无参构造器+setter注入数据:@Data @Builder @NoArgsConstructor @AllArgsConstructor @Entity public class User { // 字段定义 }校验测试数据的合法性
检查JUnit测试中插入或查询的测试数据,确保user_postcode字段的值是合法的字符串格式,没有混入可能被解析为时间的数字(比如06035这类格式容易被误判为时间戳)。
内容的提问来源于stack exchange,提问作者전수정
相关产品推荐
相关产品推荐

