순간을 기록으로

JPA Audit 기능을 이용 BaseEntity를 만들어서 Entity의 생성일과 수정일을 관리하기 본문

Development/Spring

JPA Audit 기능을 이용 BaseEntity를 만들어서 Entity의 생성일과 수정일을 관리하기

luminous13 2022. 9. 21. 00:28

상황

엔티티를 만들면 공통적으로 들어가는 속성이 있다.

생성일(creatAt)과 수정일(modifiedAt)이다.

매번 엔티티를 생성할 때마다 위 두 속성을 작성해주기 보다는 공통적으로 처리해주면 훨씬 편할 것이다.

 

BaseEntity.java

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {

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

    @LastModifiedDate
    private LocalDateTime modifiedAt;
}
  • @CreatedDate
    • Entity가 생성되어 저장될 때의 시간을 자동으로 저장한다.
  • @LastModifiedDate
    • 조회한 Entity의 값을 변경할 때 시간을 자동으로 저장한다.
  • @EntityListeners
    • Entity의 Lifecycle과 관련된 이벤트들을 듣게해준다.
  • @MappedSuperclass
    • 엔티티 클래스는 엔티티끼리만 상속할 수 있다. BaseEntity는 이름만 엔티티지 사실 엔티티가 아니라 일반 클래스다. 따라서 엔티티 클래스가 일반 클래스를 상속하기 위해서는 일반 클래스에 이 애노티에션을 붙여야한다.

 

USER.java

@Getter
@NoArgsConstructor
@Entity
@Table(name = "USERS")
public class User extends BaseEntity {

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

    @Column(nullable = false)
    private String name;

    @Column(nullable = false, unique = true, length = 100)
    private String email;

    @Column(nullable = false, length = 100)
    private String password;
}

 결과

정상적으로 생성일과 수정일 칼럼이 추가되었다.

Comments