본문 바로가기
Framework and Tool/JPA

JPA - 고급맵핑 - Multi 테이블 맵핑

by ocwokocw 2021. 7. 12.

- 참조: 자바 ORM 표준 JPA 프로그래밍

- Multi 테이블 맵핑

잘 사용하진 않지만 @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;

 

@SecondaryTable 어노테이션을 이용하여 BOARD_DETAIL 테이블을 추가적으로 맵핑하였다. 해당 어노테이션의 속성의 의미는 아래와 같다.

  • name: 추가 테이블 명
  • pkJoinColumns: 추가 테이블의 PK 컬럼

content 필드처럼 @Column 에 table 속성으로 추가 테이블명을 맵핑하면 해당 테이블의 속성이 되며 생략하면 기본 테이블의 컬럼이 된다.

 

추가테이블은 2 개만 할 수 있는게 아니라 여러개도 할 수 있는데 @SecondaryTables 를 이용하면 된다.

테스트 코드를 작성하여 실제로 Multi 테이블이 잘 사용되는지 확인해보자.

 

public static void save(EntityManager em) {
	
	EntityTransaction tx = em.getTransaction();
	tx.begin();
	
	Board board = new Board();
	board.setTitle("NOTICE#1");
	board.setContent("CONTENT#1");
	em.persist(board);
	
	tx.commit();
	em.close();
}

 

하나의 엔티티만 사용하였음에도 2 개의 테이블에 데이터가 맵핑한대로 나누어져 저장되었다. 하지만 하나의 엔티티에 여러 테이블을 맵핑하는것 자체는 권장하는 방법은 아니기때문에 참조하는 수준으로만 알고 있으면 될 것 같다.

댓글