메모장

EntityListeners

키스샷1104 2023. 11. 18. 13:31

https://mopil.tistory.com/46

 

[JPA] EntityListeners 정리

# 서론 게시글이나 댓글 CRUD를 구성할때, 생성일과 수정일을 포함하고 싶은 경우가 있다. 이럴때 그냥 LocalDateTime을 엔티티 멤버변수로 넣어놔도 되지만 이러면 디비에 들어가는 양식이 이쁘지가

mopil.tistory.com

사용법

@Entity
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class Member extends BaseEntity{

    @Id
    @GeneratedValue
    @Column(name = "member_id")
    private Long id;
    private String username;
    private int age;

    @ManyToOne(fetch = FetchType.LAZY)
    private Team team;

    public Member(String username) {
        this.username = username;
    }

    public Member(String username, int age) {
        this.username = username;
        this.age = age;
    }

    public Member(String username, int age, Team team) {
        this.username = username;
        this.age = age;
        if (team != null) {
            changeTeam(team);
        }
    }

    public void changeTeam(Team team) {
        this.team = team;
        team.getMembers().add(this);
    }

}

 

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

    @CreatedDate
    @Column(updatable = false)
    public LocalDateTime createDate;

    @LastModifiedDate
    private LocalDateTime lastModifiedDate;

    @CreatedBy
    @Column(updatable = false)
    private String createdBy;
    @LastModifiedBy
    private String lastModifiedBy;
}
@SpringBootApplication
@EnableJpaAuditing
public class JpadataApplication {

    public static void main(String[] args) {
        SpringApplication.run(JpadataApplication.class, args);
        
    }
    
  	 @Bean
     public AuditorAware<String> auditorProvider() {		//밑에2번째꺼 뭐시기 by에 쓴다고 함
     	return () -> Optional.of(UUID.randomUUID().toString());	//이부분은 세션를 넣어서 
                                                                //쓴다고는 하는데 잘 모르겠다
     }															//나중에 찍먹해봐겠다

}

 

main에는 11버전에서는 @EnableJpaAuditing을 써줘야 하더라  나머지는 몰?루

 

 

 

만약 시간, 사용자를 따로따로 쓰고싶다면 

public class BaseTimeEntity {
    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createdDate;
    @LastModifiedDate
    private LocalDateTime lastModifiedDate;
}
public class BaseEntity extends BaseTimeEntity {
    @CreatedBy
    @Column(updatable = false)
    private String createdBy;
    @LastModifiedBy
    private String lastModifiedBy;
}

이렇게 나눠서 쓰면 된다고 한다.