[JPA] JOIN TABLE

김정연·2024년 5월 7일
post-thumbnail

오늘은 자주 사용하는 조인테이블, 조인컬럼에 대해 공부한다.

데이터베이스는 조인컬럼, 조인테이블로 연관관계를 두가지로 설계할 수 있다.

조인 컬럼

조인컬럼은 주로 외래키 컬럼을 사용해서 관리한다. 그리고 외래키에 null을 허용하는 관계이므로 비식별관계라고 부른다.

MEMBER
MEMBER_ID(PK)
USERNAME
LOCKER_ID(FK, NULL허용)

LOCKER
LOCKER_ID(PK)
NAME

조인 테이블

조인테이블은 별도의 테이블을 사용해서 연관관계를 관리한다. 즉 두 테이블의 pk를 하나의 테이블에 두어 관리한다.

MEMBER
MEMBER_ID(PK)
USERNAME

MEMBER_LOCKER
MEMBER_ID(PK)
LOCKER_ID(PK)

LOCKER
LOCKER_ID(PK)
NAME

일대일 조인 테이블

일대일 조인 테이블은 외래키 컬럼 각각에 유니크 제약조건을 걸어야 한다.

joinColumns : 현재 엔티티를 참조하는 외래키
inverseJoinColumns : 반대방향 엔티티를 참조하는 외래키

 @OneToOne
    @JoinTable(name = "PARENT_CHILD",
            joinColumns = @JoinColumn(name = "PARENT_ID"),
            inverseJoinColumns = @JoinColumn(name = "CHILD_ID")
    )
    private Child child;
    @OneToOne(mappedBy = "child")
    public Parent parent;

SecondaryTable

하나의 테이블에 @SecondaryTable 을 사용해서 여러 테이블을 매핑할 수도 있다.

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

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE,
                    generator = "BOARD_SEQ_GENERATOR")
    private Long id;

    private String title;
   @Column(table = "BOARD_DETAIL")
    private String content;
}
  • SecondaryTable을 사용해서 BOARD_DETAIL과 매핑했다.
  • pkJoinColumns은 매핑할 다른 테이블의 기본키 컬럼 속성을 지정하는 것이다.
profile
백엔드 개발자

0개의 댓글