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

Spring Data多对多关系关联表新增@CreatedBy等审计属性的最佳实践

Spring Data 多对多关联表加审计字段最佳实现方案

核心思路

原生@ManyToMany注解仅能实现基础的多对多关联映射,无法直接给关联表附加自定义审计字段,因此需要将原多对多关联拆解为两个一对多关联,显式定义关联实体,在关联实体上配置审计属性即可,这是目前生产环境下兼容性和可维护性最高的实现方案。

前置准备

首先要在项目中开启JPA审计功能:

  • 在启动类/配置类上添加@EnableJpaAuditing注解
  • 实现AuditorAware<T>接口,用于返回当前操作的用户信息,供@CreatedBy、@LastModifiedBy字段自动填充

具体实现步骤

我们以Book和Author的多对多关联场景为例,关联表命名为book_author,需要添加4个审计字段:

1. 定义关联实体复合主键

使用@Embeddable定义复合主键类,必须实现Serializable接口,重写equals和hashCode方法:

@Embeddable
public class BookAuthorId implements Serializable {
    private Long bookId;
    private Long authorId;

    public BookAuthorId() {}

    public BookAuthorId(Long bookId, Long authorId) {
        this.bookId = bookId;
        this.authorId = authorId;
    }

    // 自行实现equals、hashCode方法
}

2. 定义带审计字段的关联实体

关联实体上添加@EntityListeners(AuditingEntityListener.class)开启审计监听,配置四个审计字段:

@Entity
@Table(name = "book_author")
@EntityListeners(AuditingEntityListener.class)
public class BookAuthor {
    @EmbeddedId
    private BookAuthorId id;

    @ManyToOne
    @MapsId("bookId")
    private Book book;

    @ManyToOne
    @MapsId("authorId")
    private Author author;

    @CreatedBy
    private String createdBy;

    @CreatedDate
    private LocalDateTime createdDate;

    @LastModifiedBy
    private String lastModifiedBy;

    @LastModifiedDate
    private LocalDateTime lastModifiedDate;

    // 省略构造方法、getter、setter
}

3. 调整原业务实体的关联关系

将原@ManyToMany关联改为@OneToMany关联到自定义的关联实体:

// Book实体类
public class Book {
    // 其他业务字段省略
    @OneToMany(mappedBy = "book", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<BookAuthor> authors = new ArrayList<>();
}

// Author实体类
public class Author {
    // 其他业务字段省略
    @OneToMany(mappedBy = "author", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<BookAuthor> books = new ArrayList<>();
}

注意事项

  • 后续操作关联关系时,直接操作BookAuthor对应的Repository即可,所有审计字段会自动填充,无需手动赋值
  • 配置orphanRemoval = true可以在解除关联时自动删除关联表对应数据,避免产生冗余记录

内容的提问来源于stack exchange,提问作者Andrea T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:27:04