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;
}
결과
정상적으로 생성일과 수정일 칼럼이 추가되었다.