본문 바로가기
Study/Spring

JPA Auditing 사용하여 엔티티 설계하기 | Spring Spring boot JPA Study

by M개발자 2022. 2. 15.
반응형

✔ Java 11

✔ Gradle 7

✔ Spring boot 2.6.3

✔ 목표 JPA Auditing 사용하여 생성 날짜, 수정 날짜의 컬럼 자동화

1. 엔티티 설계

디렉토리 구조

├─entity
│  │  BaseEntity.java
│  │
│  ├─name
│  │  ├─boardName
│  │  │  │  BoardName.java
│  │  │  │
│  │  │  └─repository
│  │  │          BoardNameRepository.java
│  │  │
│  │  └─userName
│  │      │  UserName.java
│  │      │
│  │      └─repository
│  │              UserNameRepository.java
│  │              UserNameRepositoryExtension.java
│  │              UserNameRepositoryImpl.java

1. Board Entity

@Getter
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class BoardMinj extends BaseEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "board_id", nullable = false)
    private Long id;

    @Column(name = "board_title", nullable = false)
    private String boardTitle;

    @Column(name = "board_content", nullable = false)
    private String boardContent;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id", nullable = false)
    private UserMinj userMinj;
}

@NoArgsConstructor(access = AccessLevel.PROTECTED)

  • 엔티티 외부 접근을 차단하는 매개변수가 없는 생성자를 생성하는 어노테이션

@ManyToOne(fetch = FetchType.LAZY)

  • 지연 로딩으로 설정

1-2. JPA Auditing - BaseEntity

생성 날짜, 수정 날짜 컬럼을 자동화하기 위해 BaseEntity를 생성한 후 Board entity에 상속받았다.

1. @EnableJpaAuditing

Application.java

@EnableJpaAuditing
@SpringBootApplication
public class SpringStudyApplication {

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

}

JPA Audit 기능을 사용하기 위해 어노테이션 추가

2. BaseEntity 클래스 생성

entity

@Getter
@MappedSuperclass
@EntityListeners({AuditingEntityListener.class})
public class BaseEntity {

    @CreatedDate
    @Column(updatable = false, name="created_at")
    private LocalDateTime createdAt;

    @LastModifiedDate
    @Column(name="last_modified_at")
    private LocalDateTime lastModifiedAt;
}

3. Entity class에서 상속받기

entity > entityName > entityName.java

@Getter
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class BoardMinj extends BaseEntity {
    ...
}

4. 필드 확인

1. 프로젝트를 실행시켜 해당 디비의 테이블에서 컬럼 확인이 가능하다.

2. SQL Preview를 통해서도 컬럼을 확인할 수 있다.


회의록

참고 자료

JPA Auddit - https://velog.io/@aidenshin/엔티티-작성-JPA-Auddit-적용

즉시 로딩과 지연 로딩 참고 - https://ict-nroo.tistory.com/132

@NoArgsConstructor(access = AccessLevel.PROTECTED) - https://erjuer.tistory.com/106

반응형

댓글