@SecondaryTable : 엔티티 하나에 여러 테이블 매핑

2023. 6. 13. 14:58JPA

반응형

@SecondaryTable을 사용하면 한 엔티티에 여러 테이블을 매핑할 수 있다.

하나의 엔티티에 여러 테이블 매핑하기

@Entity
@Table(name = "BOARD")
@SecondaryTable(name = "BOARD_DETAIL",
               pkJoinColumns = @PrimaryKeyJoinColumn(name = "BOARD_DETAIL_ID"))
public class Board {

   @Id @GeneratedValue
   @Column(name = "BOARD_ID")
   private Long id;
   
   private String title;
   
   @Column(table = "BOARD_DETAIL")
   private String content;
   ...
}

Board 엔티티는 @Table을 사용해서 BOARD 테이블과 매핑했다. 그리고 @SecondaryTable을 사용해서 BOARD_DETAIL 테이블을 추가로 매핑했다.

@SecondaryTable의 속성은 다음과 같다.

  • @SecondaryTable.name: 매핑할 다른 테이블의 이름
  • @SecondaryTable.pkJoinColumns: 매핑할 다른 테이블의 기본 키 컬럼 속성
  • content 필드는 @Column(table = "BOARD_DETAIL")을 사용해서 BOARD_DETAIL 테이블의 컬럼에 매핑했다. title 필드처럼 테이블을 지정하지 않으면 기본 테이블인 BOARD에 매핑된다.

더 많은 테이블을 매핑하려면 @SecondaryTables를 사용하면 된다.

@SecondaryTables({
   @SecondaryTable(name = "BOARD_DETAIL"),
   @SecondaryTable(name = "BOARD_FILE")
})

@SecondaryTable을 사용해서 두 테이블을 하나의 엔티티에 매핑하는 방법보다는 테이블당 엔티티를 각각 만들어서 일대일 매핑하는것을 권장한다. 

이 방법은 항상 두 테이블을 조회하므로 최적화하기 어렵다. 반면에 일대일 매핑은 원하는 부분만 조회할 수 있고 필요하면 둘을 함께 조회하면 된다.

반응형

'JPA' 카테고리의 다른 글

즉시 로딩과 지연 로딩  (0) 2023.07.31
프록시  (0) 2023.07.28
조인 테이블  (2) 2023.06.13
복합 키와 식별 관계 매핑  (0) 2023.06.08
@MappedSuperclass  (0) 2023.05.11