JPA 고급관계 매핑

송현진·2023년 7월 17일
0

Jpa

목록 보기
2/9
post-thumbnail
post-custom-banner

DB입장에선 조인 전략, 단일 테이블 전략, 구현 클래스마다 테이블 전략 상속 관계 매핑 3가지 다 매핑하도록 지원.
객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑.
상위 클래스를 추상클래스로 만들어줘야함!

정교화된 방식 조인 전략.

  • jpa와 가장 유사한 모델
  • @Inheritance(strategy = InheritanceType.JOINED) 사용
  • @DiscriminatorColumn 을 사용하면 디폴트 컬럼명으로 DTYPE이 컬럼에 들어감(디폴트로 엔티티명이 들어감) 왠만하면 넣어주는 것이 좋다.
  • @DiscriminatorValue("변수명")으로 자식테이블에서 이름을 지정할 수 있다.
    장점
  • 테이블이 정규화된다
  • 저장 공간을 효율적으로 사용
  • 외래 키 참조 무결성 제약 조건을 활용가능
    단점
  • 조회 쿼리가 복잡함
  • 데이터 등록 시 INSERT SQL 두 번 실행
  • 조회할 때 조인이 많이 사용되므로 성능 저하될 여지가 있다

단일 테이블 전략

  • @Inheritance(strategy = InheritanceType.SINGLE_TABLE) 사용
    장점
  • 테이블 1개에 컬럼들이 쭉 들어감.
  • insert, select 든 쿼리가 1번에 간결하게 들어감(성능상 이점이 있음)
    단점
  • 자식 엔티티가 매핑한 컬럼들은 null 허용하는 치명적인 단점이 있음(데이터 무결성 관점에서 애매함)
  • 상황에 따라 성능이 오히려 느려질 수 있다

구현 클래스마다 테이블 전략

  • 상위 테이블 없애고 그 속성들을 다 밑으로 내림 중복들 허용
  • @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 사용
  • @DiscriminatorColumn 이게 있어도 테이블을 사용하지 않기때문에 적용이 되지 않음
  • not null 제약 조건을 사용 가능
  • 상위클래스로 조회할 시 모든 테이블을 union all로 전부 다 뒤져서 찾게 되서 비효율적임(치명적 단점)
  • 쓰면 안되는 전략!!!!!(데이터베이스 설계자와 ORM 전문가 둘 다 추천 X)
  • 변경이란 관점에서 볼 때 매우 안좋음(새로운 것을 추가할 때 굉장히 많이 뜯어고쳐야 함)

💡기본적으로 조인 전략을 가지고 가야됨! 조인 장단점 단일 장단점으로 고민해서 선택하면 됨(너무 단순한 경우, 확장 가능성이 별로 없을 거 같을 때)! 구현 클래스는 하지마라!!

@MappedSuperclass

  • 매핑 정보만 받는 슈퍼클래스(속성만,, 상속관계는 아님!!)
  • Entity X, 테이블과 매핑 X
  • 조회, 검색 불가
  • 전체 엔티티에서 공통 매핑 정보가 필요할 때 사용
    💡 @Entity 클래스는 엔티티나 @MappedSuperclass로 지정한 클래스만 상속 가능
profile
개발자가 되고 싶은 취준생
post-custom-banner

0개의 댓글