Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

Entity Listener : 4(실제 사용하는 방법) 본문

JPA

Entity Listener : 4(실제 사용하는 방법)

Seung__ 2021. 6. 16. 23:44

좀 더 현실적으로 코드를 수정해보자.

 

createdAt, updatedAt에 각각 @CreatedDate, @LastModifidedDate 붙여주고, @AuditingEntityListener를 활용하여 간단하게 적용할 수 있었다.

 

하지만 각 class의 createdAt, updatedAt에 일일히 annotation을 붙여주는 것도 일이다. 귀찮다.

 

createdAt, updatedAt만 담당하는 class를 만들고 다른 class에서 상속받도록 하자.

 

그러면 일일히 안해줘도 된다. ㄱㅇㄷ

 

1. BaseEntity class


 

BaseEntity 클래스를 만들자. 특징으로는 @MappedSuperclass를 사용한다.

해당 annotation의 의미는 해당 클래스를 상위 엔티티의 컬럼으로 쓰겠다는 의미.

예를들어 User class가 BaseEntity를 상속받으면 User의 table의 컬럼에 BaseEntity를 추가하겠다는 의미.

@Data
@MappedSuperclass //해당 클래스 필드를 상속받는 entity의 커럶으로 포함시켜줌. 상위 엔티티의 컬럼으로 쓰겠다.
@EntityListeners(value = AuditingEntityListener.class)
public class BaseEntity {
    
    @CreatedDate
    private LocalDateTime createdAt;
    @LastModifiedDate
    private LocalDateTime updatedAt;
    
}

2. 나머지 class가 BaseEntity를 상속받도록 하자.


  User, Book, UserHistory 모두 적용.

@Builder
@Entity //Entity에는 primary key가 꼭 필요함., JPA가 관리하고 있는 객체
@Table
@Data
@EntityListeners(value = {UserEntityListener.class})
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class User extends BaseEntity implements Auditable {

뭔가 신기한게 추가되었다. @ToString, @EqualsAndHashCode가 추가되었는데, 이 둘이 없으면 @Data에 에러가 난다.

상속받은 클래스에 대한 정보가 처리되지 않는다고 한다.

 

 상속받는 class까지 ToString을 하고 EqualsAndHashCode를 비교하겠다는 의미.

@ToString : ToString()을 override
   callSuper : 부모클래스의 ToString() 호출
@EqualsAndHashCose : equals, hashCode 자동생성
   equals : 두 객체의 내용이 같은지 확인하는 연산자
   hashCode : 두 객체가 같은 객체인지 확인하는 연산자

3. 결과


UserHistory(
  super=BaseEntity(createdAt=2021-06-16T23:35:09.690498, updatedAt=2021-06-16T23:35:09.690498),
  id=6, userId=null, name=hyun19, email=hyun19@navernaver.com)

UserHistory(
   super=BaseEntity(createdAt=2021-06-16T23:35:09.801920, updatedAt=2021-06-16T23:35:09.801920),
   id=8, userId=7, name=hyun20_new, email=hyun19@navernaver.com)

BaseEntity가 column으로 사용되었고, createdAt, updatedAt이 잘 입력되었다. ㅋㅋ

 

이렇게 반복적으로 createdAt, updatedAt을 반복적으로 입력하지않고, annotation 을 계에에에속 입력하지 않게되었다.

오히려좋아!

'JPA' 카테고리의 다른 글

mappedBy()  (0) 2021.06.20
1:1 연관관계 - 1  (0) 2021.06.17
Entity Listener : 3(@AuditingEntityListener)  (0) 2021.06.16
Entity Listener : 2  (0) 2021.06.16
Entity Listener - 1  (0) 2021.06.15
Comments