Lombok @Builder警告求助:初始化表达式被忽略该如何修复?
解决Lombok @Builder在JPA实体类中的警告问题
你的实体类代码
@Entity @Table(name = "users", uniqueConstraints = { @UniqueConstraint(columnNames = "username"), @UniqueConstraint(columnNames = "email") }) @Getter @Setter @AllArgsConstructor @NoArgsConstructor @Builder public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @NotBlank @Size(max = 50) private String username; }
警告信息翻译
@Builder 会完全忽略字段的初始化表达式。如果你希望该初始化表达式作为默认值,请添加 @Builder.Default;如果该字段在构建时不应被设置,请将其设为 final。
修复方案
方案1:添加@Builder.Default保留默认值
如果希望字段的初始化值作为Builder构建时的默认值,给对应字段加上@Builder.Default注解。比如你的自增主键id,构建实体时无需手动赋值,就可以:
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Builder.Default private Long id = null;
(注:null是引用类型的默认值,可省略不写,添加@Builder.Default后,Builder会保留这个默认行为,不会忽略初始化逻辑)
而username带有@NotBlank约束,必须在构建时指定有效值,因此不需要添加该注解,强制调用Builder时传入即可。
方案2:将字段设为final(仅适用于构建时无需赋值且后续不修改的字段)
如果某个字段在构建实体时完全不需要手动设置,且后续也不会被修改,但JPA自增主键不适合这种方式(因为持久化时框架需要为其赋值),示例写法如下:
private final String fixedField = "constant_value";
针对你的User类,优先推荐给id字段添加@Builder.Default注解,既符合JPA的自增主键逻辑,又能消除警告。
内容的提问来源于stack exchange,提问作者Nunyet Calçada
相关产品推荐
相关产品推荐

