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

如何在Java 17中用JDBC/Lombok实现实体类重复字段复用?

解决方案:避免实体类重复定义审计字段

在Java 17 + Lombok + 纯JDBC环境下,有两种简洁的方式实现你的需求,替代你提到的接口/注解方案:

方式一:抽象基类封装通用字段(最直接)

通过抽象类封装created_at和updated_at私有字段,配合Lombok注解自动生成访问方法,实体类仅需继承该基类即可复用字段:

import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;

// 抽象基类,封装审计字段
@Getter
@Setter
public abstract class BaseAuditableEntity {
    private LocalDateTime createdAt;
    private LocalDateTime updatedAt;
}

// 业务实体类,继承基类即可复用字段
@Getter
@Setter
public class Bank extends BaseAuditableEntity {
    private String name;
    // 无需重复定义createdAt/updatedAt
}

说明:

  • 抽象类保证这些字段只能被实体类继承,不能直接实例化
  • Lombok的@Getter/@Setter会自动为基类和子类的所有字段生成访问方法
  • 纯JDBC环境下,DAO层可以通过实体类的getter/setter正常读写审计字段,完全符合封装规范

方式二:Lombok @Delegate注解实现字段委托(无继承依赖)

如果不想用继承(比如实体类需要继承其他类),可以用Lombok的@Delegate注解,将审计字段委托给一个独立类,达到复用效果:

import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Delegate;
import java.time.LocalDateTime;

// 独立的审计字段类
@Getter
@Setter
public class AuditFields {
    private LocalDateTime createdAt;
    private LocalDateTime updatedAt;
}

// 业务实体类,通过@Delegate复用审计字段
@Getter
@Setter
public class Bank {
    private String name;
    
    @Delegate
    private final AuditFields auditFields = new AuditFields();
}

说明:

  • @Delegate会将AuditFields类的所有公共方法(比如getCreatedAt()、setUpdatedAt())委托给Bank类,调用时直接使用bank.getCreatedAt()即可,和实体类自有字段无差异
  • 避免了单继承限制,适合实体类已有父类的场景

为什么接口方案行不通?

Java接口无法定义私有实例字段,仅能包含public static final常量和默认方法,无法封装需要维护状态的created_at/updated_at字段,因此抽象类或委托方式是更合适的选择。

内容的提问来源于stack exchange,提问作者pro-frontend

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:22:31