"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > JPA의 @MappedSuperclass 이해

JPA의 @MappedSuperclass 이해

2024-09-02에 게시됨
검색:580

Entendendo @MappedSuperclass em JPA

JPA(Java Persistence API)는 Java 클래스를 데이터베이스 테이블에 매핑하기 위한 여러 주석을 제공합니다. 유용한 주석 중 하나는 @MappedSuperclass입니다. 이는 속성이 다른 엔터티 클래스에 의해 상속되어야 하지만 엔터티 자체는 아닌 클래스를 지정하는 데 사용됩니다. Vehicle, Car, Motorcycle 등의 클래스와 관련된 실제 예제를 통해 이 주석의 유용성을 살펴보겠습니다.

@MappedSuperclass가 무엇인가요?

@MappedSuperclass 주석은 클래스가 독립적인 엔터티가 되어서는 안 되지만 해당 속성이 엔터티인 다른 클래스에 의해 상속되어야 함을 나타내는 데 사용됩니다. 이는 기본 클래스에 대해 별도의 테이블을 만들지 않고 여러 엔터티 간에 공통 속성을 공유하려는 경우 유용합니다.

주요 기능:

  1. - @MappedSuperclass로 주석이 달린 클래스는 엔터티가 아닙니다.
  2. - @MappedSuperclass 클래스에서 직접 쿼리를 실행할 수 없습니다.
  3. - @MappedSuperclass 클래스를 확장하는 하위 클래스는 데이터베이스의 개별 테이블에 매핑되지만 기본 클래스의 필드를 상속합니다.

실제 예

Vehicle, Car 및 Motorcycle에 대한 클래스 계층 구조를 사용하여 예를 만들어 보겠습니다. 여기서 Vehicle은 슈퍼클래스입니다.

1. 기본 클래스: 차량

import javax.persistence.MappedSuperclass;

@MappedSuperclass
public abstract class Veiculo {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String marca;
    private String modelo;
    private int ano;

    // Getters e Setters

}
  • 차량 클래스는 @MappedSuperclass로 주석 처리됩니다.
  • 차량 클래스에는 @id 및 @GeneratedValue 주석이 달린 id 필드가 있습니다. 이 고유 식별자는 모든 하위 클래스에 상속되어 Vehicle에서 파생된 각 엔터티에 ID 필드가 있는지 확인합니다.
  • 브랜드, 모델, 연식이라는 세 가지 공통 속성을 정의합니다.

2. 하위 클래스: 자동차

import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(name = "carro")
public class Carro extends Veiculo {

    private int quantidadePortas;

    // Getters e Setters

}
  • Car 클래스는 Vehicle 클래스의 속성을 상속합니다.
  • @Entity로 주석이 추가되고 car라는 테이블에 매핑됩니다.

3. 하위 클래스: 오토바이

import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(name = "motocicleta")
public class Motocicleta extends Veiculo {

    private boolean temSidecar;

    // Getters e Setters
}
  • Motorcycle 클래스는 Vehicle 클래스의 속성도 상속합니다.
  • @Entity로 주석이 추가되고 오토바이라는 테이블에 매핑됩니다.

테이블 매핑

위 클래스를 사용하여 JPA는 데이터베이스에 다음 테이블을 생성합니다.

  1. 테이블 자동차: 제조업체, 모델, 연식 및 수량에 대한 열이 포함되어 있습니다.
  2. 테이블 오토바이: 제조업체, 모델, 연도 및 TemSidecar에 대한 열을 포함합니다.

차량 테이블은 데이터베이스에 존재하지 않습니다. 차량 클래스는 엔터티가 아니라 단지 슈퍼클래스이기 때문입니다.

사용 시 이점 @MappedSuperclass

  • 식별자 중앙화: id 필드는 슈퍼클래스에서 관리됩니다. 차량에서 파생된 모든 엔터티는 동일한 식별 체계
  • 를 공유합니다.
  • 코드 재사용: 공통 속성을 상위 클래스에 중앙 집중화하여 하위 클래스의 중복을 피할 수 있습니다.
  • 유지 관리 용이성: 공통 속성을 한 곳에서 변경할 수 있습니다.
  • 응집력 있는 데이터 모델: 하위 클래스는 동일한 구조를 공유하므로 모델을 더 쉽게 조작하고 이해할 수 있습니다.

고려사항

수퍼클래스도 엔터티가 되도록 하려면(예: 직접 쿼리의 경우) @MappedSuperclass 대신 @Inheritance 상속 전략을 사용하세요.
@MappedSuperclass는 기본 클래스가 개별 엔터티로 유지될 필요가 없지만 해당 속성이 여러 엔터티와 관련된 상황에 이상적입니다.

결론

@MappedSuperclass 주석은 JPA에서 재사용 가능한 클래스 계층 구조를 생성하기 위한 강력한 도구입니다. 위의 예에서 우리는 Vehicle의 공통 속성을 중앙 집중화하는 동시에 Car 및 Motorcycle 엔터티의 유연성과 독립성을 유지했습니다. 이 접근 방식은 특히 유사한 특성을 공유하는 여러 엔터티가 있는 시스템에서 더욱 깔끔하고 모듈화된 설계를 촉진합니다.

릴리스 선언문 이 글은 https://dev.to/gregoriohd/entendendo-mappedsuperclass-em-jpa-4310?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3