본문 바로가기

Programming!

Spring Data JPA + Hibernate / Auditing


@EnableJpaAuditing 는 Entity에 있어서 기본적으로 포함되는 createdAt, modifiedAt, createdBy, modifiedBy등을 자동으로 주입시킬 수있도록 해주는 설정이다.


@EnableJpaAuditing

@EnableJpaRepositories

public class MyDictionaryApplication extends WebMvcConfigurerAdapter 

}



기본적으로 Auditing을 적용하기 위해서는 아래처럼 Entity에 @EntityListeners Annotation을 추가하고 기본 제공되는  AuditingEntityListener를 지정한다.



@Data

@Entity

@EntityListeners(value = { AuditingEntityListener.class })

public class XEntity {

...

}


@CreatedDate // 처음 entity가 저장될때 생성일을 주입해준다.

@CreatedBy // 생성자 주입 

@LastModifiedDate // entity가 수정될때 수정일자를 주입해준다. 

@LastModifiedBy // 수정자 주입 



일자의 경우는 Date타입 속성에 @CreatedDate, @LastModifiedDate만 지정하면 되지만 생성자/수정자의 경우는 별도의 구현체를 지정해야 한다.


public class AuthAndDateAuditorAware implements AuditorAware<String> {


@Override

public String getCurrentAuditor() {

return "userId";

}

}



만일 Spring Security를 사용한다면,

public String getCurrentAuditor() {

    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();


    if (authentication == null || !authentication.isAuthenticated()) {

        return null;

    }


    return ((User) authentication.getPrincipal()).getUsername();

}



Entity:

@Column(name = "modified_by_user", nullable = false)

@LastModifiedBy

private String modifiedByUser;