くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

Springの監査情報で、だれがいつ作成or更新したかを自動で付与する(SpringBoot/SpringData JPA)

DBの情報で、作成者や作成日や最終更新者や最終更新日を自分で追加していたけど、 Springに該当の機能があったので、調べたときの備忘録

やることは簡単、2ステップ。

1. Configクラスを作る

@Configuration
@EnableJpaAuditing
public class JpaAuditorAwareConfig {

    @Bean
    public AuditorAware<UserEntity> auditorAware() {
        return new SpringSecurityAuditor();
    }

    public static class SpringSecurityAuditor implements
            AuditorAware<UserEntity> {

        @Override
        public UserEntity getCurrentAuditor() {
            SecurityContext context = SecurityContextHolder.getContext();
            Authentication authentication = context.getAuthentication();
            if (authentication == null || !authentication.isAuthenticated()) {
                return null;
            }

            return (UserEntity) authentication.getPrincipal();
        }

    }
}

2. Entityに@CreateDateとかをつける

@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@Entity
@EntityListeners(AuditingEntityListener.class)
@Table
public class FooEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @CreatedDate
    @Column(nullable = false)
    private LocalTime createdDate;  // 作成日

    @LastModifiedDate
    @Column(nullable = false)
    private LocalTime modifiedDate;  // 最終更新日

    @CreatedBy
    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "created_user_id")
    private UserEntity createdBy;   // 作成者
    
    @LastModifiedBy
    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "modifiyed_user_id")
    private UserEntity modifiedBy;  // 最終更新者
}

以上!!

参考にしたサイト様