SpringBoot创建实体类时如何为字段设默认值以避免空值?
解决方案
1. 实体类调整:实现默认值与非空返回逻辑
你可以通过字段初始化+JPA注解配置+自定义getter逻辑,同时满足数据库表默认值要求,以及getId()、getAccountBalance()不返回null的需求:
@Entity @Data @AllArgsConstructor @NoArgsConstructor public class MainAccounts { @Id // 配置数据库id字段默认值为1,同时初始化字段避免内存中出现null @Column(columnDefinition = "BIGINT DEFAULT 1") private Long id = 1L; @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) // date字段默认null,数据库默认行为无需额外配置 private LocalDate date; // 配置数据库accountBalance字段默认值为0.00,初始化字段避免内存中出现null @Column(columnDefinition = "DOUBLE DEFAULT 0.00") private Double accountBalance = 0.0; // 重写getId,双重保障返回非null @Override public Long getId() { return id != null ? id : 1L; } // 重写getAccountBalance,双重保障返回非null @Override public Double getAccountBalance() { return accountBalance != null ? accountBalance : 0.0; } }
关键说明:
- 字段初始化:
id = 1L和accountBalance = 0.0确保实体对象在内存中不会出现null值 - 数据库默认值:
@Column(columnDefinition)指定建表时的字段默认值,插入新记录时未指定字段值的话,数据库会自动填充默认值 - 自定义getter:做兜底逻辑,即使字段被意外设为null,getter也会返回预设的默认值
2. 自动生成的表结构(以MySQL为例)
通过上述实体类,JPA自动建表的SQL会符合你的需求:
CREATE TABLE main_accounts ( id BIGINT DEFAULT 1 NOT NULL, date DATE, account_balance DOUBLE DEFAULT 0.00, PRIMARY KEY (id) );
3. 额外优化提示
- 原实体类中
AccountBalance字段名不符合Java驼峰命名规范,已修正为accountBalance,避免ORM映射时出现字段名匹配问题 @Data注解已自动生成getter/setter,你手动编写的冗余getter/setter可以删除,只保留需要自定义逻辑的两个方法即可
内容的提问来源于stack exchange,提问作者M R
相关产品推荐
相关产品推荐

