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

잘 사용하지는 않지만 @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의 속성

@Column(table = "BOARD_DETAIL")private String content;

content 필드는 @Column(table = "BOARD_DETAIL")를 사용해서 BOARD_DETAIL 테이블의 컬럼에 매핑했다.

title 필드처럼 테이블을 지정하지 않으면 기본 테이블인 BOARD에 매핑된다.

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

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

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

이 방법은 항상 두 테이블을 조회하므로 최적화하기 어렵다.

반면 일대일 매핑은 원하는 부분만 조회할 수 있고 필요하면 둘을 함께 조회하면 된다.