如何在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
相关产品推荐
相关产品推荐

