스프링 공부/게시판 프로젝트 만들기

[스프링] 11. BaseEntity를 만들어보자.

장아장 2023. 1. 9. 16:25

모든 엔티티에 공통적으로 쓰이는 부분들을 만들어두어야겠다. 

 

일단, 기본적으로 데이터베이스에 들어가기 위해서는 모든 테이블에 id라는 속성이 존재한다. 

 

또한, 생성일자, 수정일자를 등록해서 사용하려고 한다. 

 

생성, 수정일자의 경우에는

  • 사용자 : 비밀번호 최종 수정일자를 확인해, 수정일자를 기준으로 일정 기간이 지나면 비밀번호 재설정을 요청하는 알림을 추가한다. 
  • 게시물 : 게시물 작성일자를 추가하고, 수정되었을 경우, 수정됨을 알릴 수 있다. 
  • 댓글 : 게시물과 마찬가지로 작성일자, 수정일자를 추가한다. 
  • 메시지 : 카톡과 마찬가지로, 보내진 시간등을 설정해둘 수 있다. 

이렇게 다양하게 쓰이기 때문에, BaseEntity로 설정해, 모든 엔티티에서 추가적으로 id, createdTime, updatedTime을 따로 만들 필요가 없게 할 것 이다.

 

@MappedSuperclass
public class BaseEntity {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private Long id;

    @CreatedDate
    @Column(name = "CREATED_TIME", nullable = false, updatable = false)
    private LocalDateTime createdTime;


    @Column(name = "LAST_MODIFIED_TIME", nullable = false)
    private LocalDateTime lastModifiedTime;
}

이런식으로 정리를 했다. 

어노테이션에 대한 설명을 넣자면, 

사실 이미 다 써둔 글이 있다. 

@MappedSuperclass는여기에, 기본키필드 매핑은 링크를 보면 정리해두었다.

 

@CreatedDate는 매핑된 엔티티가 생성될 때 자동으로 작성되는 것이며, lastModifiedTime은 원래 @LastModifiedDate라는 어노테이션이 존재하지만, 비밀번호 수정시에만 설정할 수 있도록, @Column외의 어노테이션은 두지 않았다. 

 

또한, 이렇게 @CreatedDate를 등록했을 때, 이를 추가적으로 동작하게 메인 애플리케이션에서 적용을 시켜주어야 한다. 

@SpringBootApplication
@EnableJpaAuditing
public class BoardUpgradedApplication {

   public static void main(String[] args) {
      SpringApplication.run(BoardUpgradedApplication.class, args);
   }
}

여기에 있는 @EnableJpaAuditing 어노테이션이 @CreatedDate, @LastModifiedDate(사용자의 경우 비밀번호 수정을 따로 두기 위해 사용하지는 않았다)가 있는 인스턴스를 엔티티의 생성, 수정시에 초기화 시킬 수 있게 해준다. 

 

이제 이를 이용해 멤버를 조금 더 손봐야겠다.