엔티티와 관련된 작업을 하다 보면, 데이터의 등록 시간과 수정 시간과 같이 자동으로 추가되고 변경되어야 하는 칼럼들이 있다. 이를 자동으로 처리할 수 있도록 어노테이션을 이용하여 설정한다.
이를 적용하기 위한 예로 프로젝트내에 entity 패키지를 생성 후, 엔티티 객체의 등록 시간과 최종 수정 시간을 담당하게 될 BaseEntity 클래스를 추상클래스로 작성한다.
1. entity패키지 생성 후, 자동 엔티티 객체를 정의하는 추상클래스 작성
@MappedSuperclass : 해당 어노테이션이 적용된 클래스는 테이블로 생성되지 않는다.
따라서 실제 테이블은 BaseEntity클래스를 상속한 엔티티의 클래스로 DB 테이블이 생성된다.
@CreatedDate : JPA에서 엔티티의 생성 시간을 처리
@LastModifiedDate : 최종 수정 시간을 자동으로 처리 ( updateable = false 지정으로 해당 엔티티 객체를 DB에 반영할 때 regdate 칼럼값은 변경되지 않음 )
JPA를 이용하는 경우 객체의 범위)
JPA에서 사용하는 엔티티 객체들은 영속 콘텍스트(Persistence Context)에서 관리되는 객체이다. 이 객체들이 변경되면 결과적으로 데이터베이스에 이를 반영하는 방식이다. JPA방식에서는 엔티티 객체를 유지하고 필요할 때 꺼내서 재사용하는 방식이기 때문에 이러한 엔티티 객체에 어떤 변화가 일어나는 것을 감지하는 리스너(listener)가 있다.
JPA 내부에서 엔티티 객체가 생성/변경되는 것을 감지하는 역할이 AuditingEntityListener로 이루어진다.
@EntityListeners( value = { AuditingEntityListener.class } ) : JPA 내부에서 엔티티 객체가 생성/변경되는 것을 감지
위에서 어노테이션 설정 후 AuditingEntityListener를 활성화시키기 위해서는 프로젝트에 @EnableJpaAuditing 설정을 추가해야한다. 따라서 프로젝트 생성 시에 존재하는 Application 클래스를 수정한다
2. AuditingEntityListener를 활성화 시키기 위해 Application 클래스에 @EnableJpaAuditing 추가
@EnableJpaAuditing : JPA의 AuditingEntityListener를 활성화 시킨다.
3. 추상 엔티티 클래스를 상속하는 엔티티 클래스 작성
( 가독성을 위해 어노테이션과 import된 프레임워크 등을 생략하여 나타냄 )
entity패키지에 Guestbook 엔티티 클래스를 위와 같이 작성한뒤, 맨위에서 작성해준 BaseEntity 클래스를 상속하여 작성한다.
4. 엔티티 객체의 처리를 위한 Repository 인터페이스 작성
엔티티 객체들을 처리하는 기능을 가진 Repository 인터페이스를 작성한다. JpaRepository를 상속받도록 인터페이스를 구성한다.
5.테스트
300개의 테스트 데이터를 넣어준후 DB에 생성된 데이터를 확인한다.
생성된 데이터의 moddate(생성 시간), moddate(수정 시간)이 자동으로 null이 아닌 값으로 채워지는 것을 확인할 수 있다.
'코드로 배우는 스프링부트 웹 프로젝트' 카테고리의 다른 글
Springboot) 서비스 계층과 DTO (0) | 2021.12.02 |
---|---|
Springboot) 동적 쿼리 처리를 위한 Querydsl 설정과 사용 (0) | 2021.12.02 |
Springboot)Thymeleaf 의 사용법 (0) | 2021.11.26 |
Springboot) MVC패턴 (0) | 2021.11.26 |
Springboot) 쿼리 메서드와 @Query (0) | 2021.11.25 |