공통으로 쓰이는 컬럼 추가하기

타마타마·2022년 9월 6일
0

JPA

목록 보기
8/10
post-thumbnail

실무에서 사용하다보면 유지보수를 위해 등록/수정일, 등록/수정자에 대한 값을 DB에 저장해줘야한다.

순수 JPA로 구현할 순 있지만, Spring Data-JPA를 사용하면 더 간결하게 사용할 수 있다.

왜 시간과 등록/수정자를 구분지은 것인가 ? >> 시간은 거의 모든 곳에서 사용하지만, 등록자&수정자는 사용하는 부분이 있을수도 없을수도 있기 때문.

시간만 사용한다면 Entity에 BaseTimeEntity만 상속하고, 등록자+시간 포함하려면 BaseENtity를 상속해주면 되겠지 ?

  • JpaBaseEntity.java

@EntityListeners(AuditingEntityListener.class) 
//이런 공통 엔티티가 많은 경우 META-INF 에 META-INF/orm.xml를 넣어준다. >> 전체적용
@MappedSuperclass
@Getter
public class BaseEntity extends BaseTimeEntity{ 
    
    @CreatedBy
    @Column(updatable = false)
    private String createdBy;

    @LastModifiedBy
    private String lastModifiedBy;

}

-BaseTimeEntity.java

@EntityListeners(AuditingEntityListener.class) //이런 공통 엔티티가 많은 경우 META-INF 에 META-INF/orm.xml를 넣어준다. >> 전체적용
@MappedSuperclass
@Getter
public class BaseTimeEntity {

    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createdDate;

    @LastModifiedBy
    private LocalDateTime getLastModifiedDate;
}

-DataApplication.java

DataJpaApplication에 @Bean으로 AuditorAware를 생성하여 적용한다. 현재는 그냥 랜덤값으로 넣어주었지만 실무에서는 시큐리티를 사용하여 세션 등을 넣어줘야함.

@SpringBootApplication
public class DataJpaApplication {

	public static void main(String[] args) {
		SpringApplication.run(DataJpaApplication.class, args);
	}
    
	@Bean
	public AuditorAware<String> auditorProvider(){
		return () -> Optional.of(UUID.randomUUID().toString());
	}
}

0개의 댓글