You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同时使用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,提问作者전수정

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 19:55:31