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

如何记录JPA实体EvaluationForm的增删改操作?

记录JPA实体操作的几种方案

针对你的EvaluationForm实体,要记录它的新增、编辑、删除操作,有以下几种实用方案:

一、直接用JPA生命周期注解(快速实现)

在实体类里添加生命周期回调方法,对应不同操作触发逻辑,适合简单场景:

@Entity
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Table(name = "evaluation_form")
@SQLDelete(sql = "UPDATE {h-schema}evaluation_form SET status = 0 WHERE id=? AND version = ?")
@Where(clause="status <> 0")
public class EvaluationForm extends ExPersistableEntity<String> {
    // 原有字段保留
    @Id
    @GeneratedValue(generator = "uuid")
    @GenericGenerator(name = "uuid", strategy = "uuid")
    private String id;
    private String code;
    @Column(columnDefinition = "nvarchar(255)")
    private String name;
    private String biddingCode;
    @Column(columnDefinition = "nvarchar(255)")
    private String biddingName;
    private String biddingType;
    private String biddingMethod;
    private String state;
    private String biddingForm;

    // 新增操作记录逻辑
    @PrePersist
    private void logCreate() {
        // 这里替换成你的日志记录逻辑,比如插入操作日志表
        System.out.println("新增EvaluationForm,ID:" + this.id);
    }

    @PreUpdate
    private void logUpdate() {
        System.out.println("编辑EvaluationForm,ID:" + this.id);
    }

    @PreRemove
    private void logDelete() {
        // 因为用了逻辑删除,调用remove方法时会触发这个回调
        System.out.println("删除EvaluationForm,ID:" + this.id);
    }
}

优点是快速上手,缺点是业务逻辑和实体类耦合度高。

二、Spring Data JPA Auditing(推荐解耦方案)

通过审计功能统一管理操作时间、操作人等信息,还能扩展记录操作类型:

  1. 先定义一个审计基类:
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class AuditableBase {
    @CreatedDate
    @Column(name = "create_time", updatable = false)
    private LocalDateTime createTime;

    @LastModifiedDate
    @Column(name = "update_time")
    private LocalDateTime updateTime;

    @CreatedBy
    @Column(name = "create_by", updatable = false)
    private String createBy;

    @LastModifiedBy
    @Column(name = "update_by")
    private String updateBy;

    // 针对逻辑删除新增字段
    @Column(name = "delete_time")
    private LocalDateTime deleteTime;

    @Column(name = "delete_by")
    private String deleteBy;

    // 生成getter、setter
}
  1. 修改EvaluationForm继承这个基类:
// 原有注解不变
public class EvaluationForm extends AuditableBase {
    // 原有字段保留
}
  1. 配置操作人获取逻辑(如果需要记录操作人):
@Component
public class CurrentAuditor implements AuditorAware<String> {
    @Override
    public Optional<String> getCurrentAuditor() {
        // 这里替换成从上下文获取登录用户的逻辑,比如Spring Security
        return Optional.of("当前登录用户名");
    }
}
  1. 在启动类添加@EnableJpaAuditing开启审计功能。

如果要记录具体操作类型(新增/编辑/删除),可以结合@PrePersist、@PreUpdate在审计基类里补充标记逻辑,或者单独写日志服务。

三、自定义JPA事件监听器(完全解耦)

把操作记录逻辑抽成独立监听器,彻底和实体类分离:

  1. 编写监听器类:
@Component
public class EvaluationFormOperationListener {

    // 注入你的日志服务
    @Autowired
    private OperationLogService logService;

    @PrePersist
    public void onCreate(EvaluationForm entity) {
        logService.saveLog(entity.getId(), "新增", "evaluation_form", JSONObject.toJSONString(entity));
    }

    @PreUpdate
    public void onUpdate(EvaluationForm entity) {
        logService.saveLog(entity.getId(), "编辑", "evaluation_form", JSONObject.toJSONString(entity));
    }

    @PreRemove
    public void onDelete(EvaluationForm entity) {
        logService.saveLog(entity.getId(), "删除", "evaluation_form", JSONObject.toJSONString(entity));
    }
}
  1. 在实体类上绑定监听器:
@Entity
@Data
// 原有注解...
@EntityListeners(EvaluationFormOperationListener.class)
public class EvaluationForm extends ExPersistableEntity<String> {
    // 原有字段保留
}

这种方式适合复杂业务场景,代码职责更清晰。

内容的提问来源于stack exchange,提问作者Urrego Hector

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:33:40