반응형
@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 |