JVM/JPA
@JoinTable
kyoulho
2023. 6. 19. 13:34
조인 테이블은 주로 다대다 관계를 일대다, 다대일 관계로 풀어내기 위해 사용한다.
그렇지만 일대일, 일대다, 다대일 관계에서도 사용한다.
속성 | 기능 |
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;
}