Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

Entity Listener : 3(@AuditingEntityListener) 본문

JPA

Entity Listener : 3(@AuditingEntityListener)

Seung__ 2021. 6. 16. 23:14

앞에서 정보의 생성/수정시 생성된 시간/수정된 시간이 입력될 수 있도록

EntityListener를 직접 만들어서 활용했다.

2021.06.15 - [JPA] - Entity Listener - 1

 

Entity Listener - 1

istener : 이벤트를 관찰하고 있다가 이벤트가 발생하면 특정 동작을 진행하는 것을 말한다. Entity Listener는 Entity가 동작하는 몇 가지 방법에 대한 이벤트를 관찰하고 있음. 1. Listener 관련 annotaions @P

bsh-developer.tistory.com

2021.06.16 - [JPA] - Entity Listener : 2

 

Entity Listener : 2

히스토리 데이터의 경우 db의 특정 데이터가 수정이 되면 해당 값의 복사본은 다른 테이블에 복사해 두는 경우가 있음. 이전에 만든 user에 대한 정보는 중요한 정보로, 데이터의 수정이 이뤄졌을

bsh-developer.tistory.com

 

 

??? : 짜잔! 미리 준비해왔어요!

생성시간/수정시간 같은 것들은 항상 쓰이기 때문에 spring 에서 기본으로 제공하는 Listener가 있다.

 

 

1. BookManager Application에 @EnableJpaAuditing


package com.jpa.bookmanager;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@SpringBootApplication
@EnableJpaAuditing
public class BookmanagerApplication {

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

}

 

2. @EntityListeners 수정(MyEntityListener --> AuditingEntityListener)


@EntityListeners(value = {AuditingEntityListener.class, UserEntityListener.class})
public class User implements Auditable{

 

@EntityListeners(value = AuditingEntityListener.class)
public class Book implements Auditable {

 

3.Audiding할 변수에 @annotation 지정


createdAt, updatedAt에 annotaion을 붙여주자

 createdAt --> @CreatedDate

  updatedAt --> @LastModifiedDate

 

- User class

package com.jpa.bookmanager.domain;

import lombok.*;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import java.lang.reflect.GenericDeclaration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

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

    @NonNull
    private String name;


    @NonNull
    private String email;

    @Column
    @CreatedDate
    private LocalDateTime createdAt;

    @Column
    @LastModifiedDate
    private LocalDateTime updatedAt;

    @Id
    @GeneratedValue //자동으로 하나씩 증가함.
    private Long id;


    @Transient 
    private String testData;


    @Enumerated(value = EnumType.STRING)
    private Gender gender;


}

- UserHistory class

@Entity
@NoArgsConstructor
@Data
@EntityListeners(value = AuditingEntityListener.class)
public class UserHistory implements Auditable{

    @Id
    @GeneratedValue
    private long id;

    private Long userId;

    private String name;

    private String email;

    @CreatedDate
    private LocalDateTime createdAt;
    @LastModifiedDate
    private LocalDateTime updatedAt;

}

겁나 간단하게 설정이 가능하다.

UserHistory(id=6, userId=null, name=hyun19, email=hyun19@navernaver.com, 
            createdAt=2021-06-16T23:11:32.481450, updatedAt=2021-06-16T23:11:32.481450)
UserHistory(id=8, userId=7, name=hyun20_new, email=hyun19@navernaver.com, 
            createdAt=2021-06-16T23:11:32.573145, updatedAt=2021-06-16T23:11:32.573145)

 

'JPA' 카테고리의 다른 글

1:1 연관관계 - 1  (0) 2021.06.17
Entity Listener : 4(실제 사용하는 방법)  (0) 2021.06.16
Entity Listener : 2  (0) 2021.06.16
Entity Listener - 1  (0) 2021.06.15
@Entity 속성 2  (0) 2021.06.15
Comments