조인 테이블은 주로 다대다 관계를 일대다, 다대일 관계로 풀어내기 위해 사용한다.
그렇지만 일대일, 일대다, 다대일 관계에서도 사용한다.
속성 | 기능 |
name | 연결 테이블의 이름 |
joinColumns | 현재 엔티티를 참조하는 외래키 |
inverserJoinColumns | 반대 방향 엔티티를 참조하는 외래 키 |
일대일 조인 테이블
만일 이런 구조를 고민하고 있다면 Child를 연관관계의 주인으로 만들자.
@Entity
public class Parent {
@Id
@GeneratedValue
@Column(name = "PARENT_ID")
private Long id;
private String name;
@OneToOne
@JoinTable(name = "PARENT_CHILD",
joinColumns = @JoinColumn(name = "PARENT_ID"),
inverseJoinColumns = @JoinColumn(name = "CHILD_ID"))
private Child child;
}
// 단방향 매핑
@Entity
public class Child {
@Id
@GeneratedValue
@Column(name = "CHILD_ID")
private Long id;
private String name;
}
// 양방향 매핑
@Entity
public class Child {
@OneToOne(mappedBy="child")
private Parent parent;
private String name;
}
일대다 조인 테이블
일대다 관계를 만들려면 조인 테이블의 컬럼 중 다(N)의 PK의 유니크 제약조건을 걸어야 한다.
@Entity
public class Parent {
@Id
@GeneratedValue
@Column(name = "PARENT_ID")
private Long id;
private String name;
@OneToOne
@JoinTable(name = "PARENT_CHILD",
joinColumns = @JoinColumn(name = "PARENT_ID"),
inverseJoinColumns = @JoinColumn(name = "CHILD_ID"))
private List<Child> child = new ArrayList<>();
}
@Entity
public class Child {
@Id
@GeneratedValue
@Column(name = "CHILD_ID")
private Long id;
private String name;
}
다대일 조인 테이블
@Entity
public class Parent {
@Id
@GeneratedValue
@Column(name = "PARENT_ID")
private Long id;
private String name;
@OneToMany(mappedBy = "parent")
private List<Child> child = new ArrayList<>();
}
@Entity
public class Child {
@Id
@GeneratedValue
@Column(name = "CHILD_ID")
private Long id;
private String name;
@ManyToOne(optional = false)
@JoinTable(name = "PARENT_CHILD",
joinColumns = @JoinColumn(name = "CHILD_ID"),
inverseJoinColumns = @JoinColumn(name = "PARENT_ID"))
private Parent parent;
}
다대다 조인 테이블
728x90
'JVM > JPA' 카테고리의 다른 글
즉시 로딩, 지연 로딩, 프록시 (0) | 2023.06.23 |
---|---|
@SecondaryTable, @SecondaryTables (1) | 2023.06.19 |
@MapsId (0) | 2023.06.18 |
@MappedSuperclass (0) | 2023.06.17 |
상속 관계 매핑 (슈퍼-서브 타입 모델링) (0) | 2023.06.17 |