@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의 목적에 맞지 않으며, 실수로 인스턴스화하는 것을 방지하기 위해 추상 클래스로 선언하는 것이 좋습니다.