728x90
@MappeSuperclass란❓
@MappedSuperclass 어노테이션은 객체-관계 매핑에서 부모 클래스가 공통적으로 제공하는 매핑 정보를 자식 클래스들이 상속받을 수 있도록 해주는 기능입니다.
이를 통해 여러 엔티티에서 반복적으로 사용되는 필드들을 한 곳에서 관리할 수 있으며, 코드의 재사용성과 유지보수성을 향상시킬 수 있습니다.
주로 createdAt, createdBy, updatedAt, updatedBy와 같은 감사(auditing) 필드나 기타 공통적으로 사용되는 필드들을 정의할 때 사용합니다.
프로젝트에 @MappeSuperClass 적용하기
@Setter
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@Slf4j
public abstract class Timestamped {
@CreatedDate
@Column(updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime createdAt;
@CreatedBy
@Column(updatable = false)
private Long createdBy;
@LastModifiedDate
@Column
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime updatedAt;
@LastModifiedBy
@Column(updatable = false)
private Long updatedBy;
@Column
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime deletedAt;
@Column(updatable = false)
private Long deletedBy;
// 코드 생략
}
먼저 추상클래스와 @MappedSuperClass 어노테이션을 함께 사용했습니다. @MappedSuperclass와 추상 클래스를 함께 사용하여 아래와 같은 이점이 있습니다.
강제 상속
- 추상 클래스는 인스턴스를
직접 생성할 수 없기 때문에, 자식 클래스가 반드시 상속받아야 합니다. - 이를 통해 코드 구조를 명확하게 유지할 수 있습니다.
공통 기능 구현
- 추상 클래스는 공통적인 필드나 메서드를 구현하고, 자식 클래스에 해당 기능을 제공할 수 있습니다.
객체-관계 매핑에서 활용
- @MappedSuperclass를 추상 클래스와 함께 사용하면, 공통적인 매핑 정보(예: createdAt, updatedAt)를 여러 엔티티에 쉽게 적용할 수 있습니다.
지금 하고 있는 프로젝트에서 감사(auditing)필드가 각 도메인별로 필요했기 때문에 추상클래스와 @MappedSuperClass를 함께 사용했습니다.
또한 Spring Data JPA와 함께 사용할 경우, @EntityListeners(AuditingEntityListener.class)를 통해 생성 및 수정 시간 정보를 자동으로 관리할 수 있습니다.
이렇게 각 도메인별에서 해당 추상클래스를 상속받으면 간단하게 사용할 수 있게 되었습니다!!!😁
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2024.09.02 - Redis 활용하여 사용자 인증 정보 캐싱하기 (0) | 2024.09.02 |
---|---|
[TIL, 일일 회고] 2024.09.01 - Java 12+의 switch 표현식으로 코드 간결성 높이기 (0) | 2024.09.01 |
[Til, 일일 회고] 2024.08.30 - @MappedSuperclass란 무엇일까❓ (0) | 2024.08.30 |
[TIL, 일일 회고] 2024.08.29 - UserDetails와 getAuthorities() 메서드 이해하기 (0) | 2024.08.29 |
[TIL, 일일 회고] 2024.08.28 - Git 브랜치 전환 시 파일이 계속 보이는 이유와 해결 방법 (0) | 2024.08.28 |