BaseEntity(@CreatedDate,@LastModifiedDate)

yesrin·2024년 6월 8일

JPA

목록 보기
7/7

BaseEntity를 만들어 상속 받아 사용할 수 있다

  • @EntityListeners(AuditingEntityListener.class)
    엔티티가 생성되거나 수정될 때 자동으로 특정 작업을 수행하도록 설정하는 어노테이션
    AuditingEntityListener 클래스와 함께 사용, 엔티티의 생성 시간과 수정 시간을 자동으로 관리

  • @CreatedDate와 @LastModifiedDate 어노테이션과 함께 사용되면, 해당 필드의 값이 엔티티가 생성되거나 수정될 때마다 자동으로 업데이트됩니다.


선언

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

    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private Long id;

    @Comment("최초 생성 시간")
    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createdAt;       //생성시간

    @Comment("마지막 수정 시간")
    @LastModifiedDate
    private LocalDateTime updatedAt;        //변경된 시간
}

사용

@Getter
@NoArgsConstructor
@Entity
public class Apple extends BaseEntity

여기서 질문!!!
왜 BaseEntity를 그냥 클래스가 아닌, 추상 클래스로 선언했을까?
=> 이 클래스를 직접 인스턴스화하는 것을 방지하기 위함.
=> 실제 엔티티의 세부적인 특성은 하위 클래스에서 정의하도록 강제하는 효과를 가짐

만약 BaseEntity를 일반 클래스로 선언한다면, 이 클래스 자체로도 인스턴스를 생성할 수 있게 됩니다. 이는 BaseEntity의 목적에 맞지 않으며, 실수로 인스턴스화하는 것을 방지하기 위해 추상 클래스로 선언하는 것이 좋습니다.

profile
안녕하세요! 틀린 정보는 댓글 달아 주세요.

0개의 댓글