๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

JPA

JPA MappedSuperclass๋กœ Entity ์ƒ์œ„ ํด๋ž˜์Šค ์ƒ์„ฑ

MappedSuperclass๋กœ Entity ์ƒ์œ„ ํด๋ž˜์Šค ์ƒ์„ฑ

@MappedSuperclass๋ฅผ ์ด์šฉํ•˜์—ฌ Entity๋“ค์˜ ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ๋ณด์ž.

@CreatedDate

Model ๊ฐ์ฒด์˜ Entity๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, ์ƒ์„ฑ๋œ ์‹œ๊ฐ„์„ ์ €์žฅํ•˜๊ณ  ์‹ถ์œผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์†์„ฑ์„ Entity์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

    @CreatedDate
    private LocalDateTime createDate;

Entity์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์ด Entity๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, DB์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์นผ๋Ÿผ์ด ์ €์žฅ๋œ๋‹ค.

ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“  ์‹œ๊ฐ„์ด DB์— ์ €์žฅ๋œ๋‹ค.

์ƒ์„ฑ ์‹œ๊ฐ„์ด ํ•„์š” ์—†๋Š” Entity๊ฐ€ ์žˆ์„๊นŒ??

์•„๋งˆ ์›ฌ๋งŒํ•œ Entity๋Š” ๋ชจ๋‘ ์ƒ์„ฑ ์‹œ๊ฐ„์ด ํ•„์š”ํ•  ๊ฒƒ์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๊ณ  ๋˜‘๊ฐ™์€ @CreateDate ์ฝ”๋“œ๋ฅผ ๊ฐ๊ฐ Entity๋งˆ๋‹ค ์ž…๋ ฅํ•˜๋ฉด ๋น„ํšจ์œจ์ ์ด๋‹ค.

@MappedSuperclass๋กœ Entity ์ƒ์œ„ ํด๋ž˜์Šค ์ƒ์„ฑํ•ด์„œ ์ฝ”๋“œ์˜ ๋ฐ˜๋ณต์„ ์—†์• ๋ณด์ž.

CreateDateEntity

๋‹ค์Œ๊ณผ ๊ฐ™์ด CreateDateEntity๋ฅผ ์ž‘์„ฑํ•ด ์ค€๋‹ค.

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

import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class CreateDateEntity {
    @CreatedDate
    private LocalDateTime createDate;
}

@MappedSuperclass ์ฃผ์„์œผ๋กœ ์ธํ•ด ์ด ํด๋ž˜์Šค๋ฅผ ๋‹ค๋ฅธ Entity๊ฐ€ ์ƒ์†ํ•  ๊ฒฝ์šฐ, createDate ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

@EntityListeners(AuditingEntityListener.class)๋Š” Auditing ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ ํ•ด์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ธ๋ฐ, Auditing์€ JPA๊ฐ€ DB์˜ ๋ณ€ํ™”๊ฐ€ ์žˆ์„ ๋•Œ๋งˆ๋‹ค ๊ฐ์‹œํ•ด ์ฃผ๋Š” ๊ธฐ๋Šฅ์œผ๋กœ, ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค createDate์— ์‹œ๊ฐ„์„ ๋„ฃ์–ด์•ผ ํ•˜๋ฏ€๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์ƒ์†, Auditing ํ™œ์„ฑํ™”

๊ธฐ์กด์— User์— ์žˆ๋˜ createDate ํ•„๋“œ๋ฅผ ์ง€์›Œ์ฃผ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ์†ํ•œ๋‹ค.

public class User extends CreateDateEntity

Application Class

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

@EnableJpaAuditing // Auditing ํ™œ์„ฑํ™”
@SpringBootApplication
public class StudyMateApplication {

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

}

Application Class์— @EnableJpaAuditing๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ Auditing ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”์‹œํ‚จ๋‹ค.

๊ฒฐ๊ณผ ํ™•์ธ

์ƒ์†๋ฐ›๊ธฐ ์ „๊ณผ ๋™์ผํ•˜๊ฒŒ ์ƒ์„ฑ ์‹œ๊ฐ„์ด ์ถœ๋ ฅ๋œ๋‹ค.

์ด๋กœ์จ createDate ํ•„๋“œ๊ฐ€ ํ•„์š”ํ•œ ๋ชจ๋“  Entity๋Š” CreateDateEntity๋ฅผ ์ƒ์†๋ฐ›์œผ๋ฉด ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.