일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- gitinitial
- jpa
- Open EntityManager
- 자바제너릭
- JPA Hint & Lock
- springboot기본설정
- springbootproxy
- jpqlquery
- sql
- spring
- 이해와 원리
- OSIV
- 스프링부트기본설정
- javageneric
- dockercmd
- 데이터베이트h2
- JPA값타입
- JDBC connection pool
- MySqlType
- 임베디드타입
- 스프링부트
- 에이치투데이터베이스
- 제이피큐엘쿼리
- Git
- JPA프록시
- springbootH2
- JPAmapping
- httppie
- JPAproxy
- embededtype
Archives
- Today
- Total
빡코
[스프링데이터 JPA] Auditing 본문
엔티티를 생성, 변경할 때 변경한 살마과 시간을 추적하고 싶을 때 사용한다.
등록일, 수정일, 등록자, 수정자
@MappedSuperclass //속성들을 내려서 테이블에서 생성이된다.
package study.datajpa.entity;
import javax.persistence.Column;
import javax.persistence.MappedSuperclass;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import java.time.LocalDateTime;
@MappedSuperclass //속성들을 내려서 테이블에서 생성이된다.
public class JpaBaseEntity {
@Column(updatable = false)
private LocalDateTime createdDate;
private LocalDateTime updatedDate;
@PrePersist
public void prePersist(){
LocalDateTime now = LocalDateTime.now();
createdDate = now;
updatedDate = now;
}
@PreUpdate
public void preUpdate() {
updatedDate = LocalDateTime.now();
}
}
상속
public class Member extends JpaBaseEntity {
}
내려 받은 두개의 컬럼이 생성된 것을 확인할 수 있다.
테스트 코드
@Autowired
MemberRepository memberRepository;
@Test
@Transactional
public void JpaEventBaseEntity() throws Exception {
Member member = new Member("member1");
memberRepository.save(member); // @PrePersist 발생
Thread.sleep(100);
member.setUsername("member2");
em.flush();
em.clear();
//when
Member findMember = memberRepository.findById(member.getId()).get();
//then
System.out.println("findMember.getCreatedDate " + findMember.getCreatedDate());
System.out.println("findMember.getUpdatedDate " + findMember.getUpdatedDate());
}
실행 결과
findMember.getCreatedDate 2023-05-11T22:05:51.915430
findMember.getUpdatedDate 2023-05-11T22:05:52.084978
스프링데이터 Auditing 적용 - 등록일, 수정일
@EnableJpaAuditing 어노테이션 필수 추가
@EnableJpaAuditing
@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());
}
//위와 같은 코드
// @Bean
// public AuditorAware<String> auditorProvider() {
// return new AuditorAware<String>() {
// @Override
// public Optional<String> getCurrentAuditor(){
// return Optional.of(UUID.randomUUID().toString());
// }
// }
// }
}
@EntityListeners(AuditingEntityListener.class) //이벤트 기반으로 동작한다
@MappedSuperclass
@Getter
public class BaseEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime lastModifiedDate;
//등록자, 수정자
@CreatedBy
@Column(updatable = false)
private String createdBy;
@LastModifiedBy
private String lastModifiedBy;
}
Meber 엔티티 변경
public class Member extends BaseEntity {
}
@Autowired
MemberRepository memberRepository;
@Test
@Transactional
//@Rollback(value = false)
public void JpaEventBaseEntity() throws Exception {
Member member = new Member("member1");
memberRepository.save(member); // @PrePersist 발생
Thread.sleep(100);
member.setUsername("member2");
em.flush();
em.clear();
//when
Member findMember = memberRepository.findById(member.getId()).get();
//then
System.out.println("f/indMember.getCreatedDate " + findMember.getCreatedDate());
System.out.println("findMember.getUpdatedDate " + findMember.getLastModifiedDate());
System.out.println("findMember.getCreateBy " + findMember.getCreatedBy());
System.out.println("findMember.getLastModifiedBy " + findMember.getLastModifiedBy());
}
f/indMember.getCreatedDate 2023-05-11T23:07:16.074374
findMember.getUpdatedDate 2023-05-11T23:07:16.253899
findMember.getCreateBy 39c08ec8-2dcd-4c77-ac9a-c432e0045226
findMember.getLastModifiedBy 44c8ec53-f47f-4be4-8c16-a97e12103e7b
'Java > JPA' 카테고리의 다른 글
[스프링데이터JPA] 스프링테이터 JPA 분석 (0) | 2023.05.12 |
---|---|
[스프링데이터 JPA] Web 확장 - 도메인클래스컨버터, 페이징과 정렬 (0) | 2023.05.12 |
[스프링 데이터 JPA] 사용자 정의 리포지토리 구현 (0) | 2023.05.11 |
[스프링 데이터 JPA] JPA Hint & Lock (0) | 2023.05.11 |
[스프링 데이터 JPA] fetchJoin과 EntityGrap (0) | 2023.05.11 |