인프런 커뮤니티 질문&답변

Luke님의 프로필 이미지
Luke

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

@MappedSuperclass에 대해 궁금증

작성

·

383

0

// Common 패키지에 작성
@Data
@MappedSuperclass
public abstract class Users extends {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    protected Long id;

    @Column(name = "name")
    protected String name;

}
//A패키지
@Entity
@Table(name = "users")
public class APackageUsersEntity extends Users {
   
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "company_id")
    private CompaniesEntity companies;

}

//B패키지
@Entity
@Table(name = "users")
public class BPackageUsersEntity extends Users {
   
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "hobby_id")
    private HobbyEntity hobby;

}



만약에 User라는 entity가 company와 hobby라는 테이블과 연관관계를 가지고 있을때,

각각 다른 기능으로 인해 분리된 A라는 패키지와 B라는 패키지에서

A패키지에서 User는 Company의 데이터만 사용하고,(Hobby 데이터를 사용하지 않음)

B라는 패키지에서 User가 Hobby라는 연관관계 데이터만 사용하게 된다면,(Company 데이터를 사용하지 않음)

User라는 추상클래스를 common페키지로 빼고, 해당 User를 필요로 하는 각 패키지에서 상속받아,
필요한 연관관계만 맺어 사용하는 이런 방식에 대해서 좋은 방법일까 궁금합니다.

이렇게 작성한 이유는 패키지별로(기능별로) 연관관계를 맺고 사용하는 데이터가 다른데,
UserEntity에 전부 작성하면  너무 거대해지지 않을까 라는 생각에서 시작됬는데요

이렇게 사용하는거에 대해서는 어떻게 생각하시나요..?

강사님의 직장에서도 하나의 entity가 여러 연관관계를 맺고, 어떤 기능에서는 해당 관계데이터가 필요 없는 경우도 있을수 있는데, 어떤식으로 구성해서 사용하는지 궁금합니다.

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. Luke님

상황에 따라 다르겠지만 저는 이 방법이 장점도 있지만, 단점이 많은 방법이라 생각합니다.

엔티티는 결과적으로 테이블과 직접적으로 관련이 있습니다.

그래서 엔티티와 테이블을 임의로 분리하게 되면 관리 이슈가 발생할 수 있습니다.

누군가 특정 테이블을 고쳤는데 그게 여러 엔티티에 분산되어 있는데 누락하게 되면, 큰 이슈가 발생합니다. 저는 그런 관점에서 엔티티와 테이블의 관계를 단순화 하는게 좋다 생각합니다.

설계상 해당 테이블이 너무 크면 해당 테이블 자체를 분리할 고민이 필요하다 생각합니다.

감사합니다.

Luke님의 프로필 이미지
Luke

작성한 질문수

질문하기