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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:45:34