@MappedSuperclass
어노테이션은 엔티티 클래스에서 공통으로 사용되는 매핑 정보를 정의하기 위해 사용되는 것입니다.
해당 어노테이션을 사용하면 DB테이블과 직접 매핑되지 않지만 영속성을 가지지 않는 추상 클래스가 됩니다. 따라서 추상 클래스를 하위 엔티티 클래스가 상속받아 사용하게 됩니다.
이를 통해 코드 중복을 피하고 공통된 매핑 정보를 재사용할 수 있습니다.
@MappedSuperclass
public abstract class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 다른 공통 필드들...
// 게터, 세터, 기타 메서드들...
}
@Entity
public class Book extends BaseEntity {
// Book에 특화된 필드들...
// 게터, 세터, 기타 메서드들...
}
BaseEntity는 DB 엔티티와 매핑되지 않고, 영속성을 가지는 클래스가 되며, BaseEntity를 상속하는 Book은 DB에 매핑이 되고 BaseEntity의 필드들을 상속받으며 DB에 매핑이 됩니다.
즉, BaseEntity의 필드들을 포함해서 Book은 DB에 매핑이 됩니다.