JPA auditing을 이용해 공통필드 사용하기

Sol's·2023년 1월 11일

프로젝트

목록 보기
7/16

JPA Auditing 적용

자 이제 Entity에 공통적으로 들어가는 값들을 정의할 것이다.

private LocalDateTime createdAt;
private LocalDateTime lastModifiedAt;
private LocalDateTime deletedAt;

JPA Auditing 기능 활성화

사용방법은 간단하다 Configuration 클래스를 생성하고 @EnableJpaAuditing을 사용하면 활성화가 된다.

@Configuration
@EnableJpaAuditing
public class JpaAuditingConfiguration {
}

BaseEntity 만들기

공통으로 들어가는 값들을 정의한 클래스를 만들어야 한다.
@MappedSuperclass : BaseEntity를 상속한 entity들은 BaseEntity의 멤버변수를 모두 컬럼으로 인식
@EntityListeners(AuditingEntityListener.class) : entity를 DB에 적용 전후로 콜백(auditing 정보를 주입하는 클래스)

@Getter
@Setter
@MappedSuperclass  //BaseEntity를 상속한 entity들은 BaseEntity의 멤버변수를 모두 컬럼으로 인식
@EntityListeners(AuditingEntityListener.class) //entity를 DB에 적용 전후로 콜백(auditing 정보를 주입하는 클래스)
@ToString
public class BaseEntity {

    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createdAt;

    @LastModifiedDate
    @Column
    private LocalDateTime lastModifiedAt;


    private LocalDateTime deletedAt;

    // 삭제
    public void deleteSoftly(LocalDateTime deletedAt) {
        this.deletedAt = deletedAt;
    }

    // 확인
    public boolean isSoftDeleted() {
        return null != deletedAt;
    }
    // 삭제 취소
    public void undoDeletion(){
        this.deletedAt = null;
    }
}

BaseEntity를 Entity에 상속받기

@Entity
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Builder
@Table(name = "Users")
public class User extends BaseEntity{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String userName;
    private String password;
}

위와같이 상속을 받으면 정상적으로 BaseEntity의 정의된 필드들이 Entity에 적용이 된다.

profile
배우고, 생각하고, 행동해라

0개의 댓글