더보기
@OneToOne
일대일 관계를 나타내는 매핑정보
1:1 관계를 지정하기에 앞서 이것이 꼭 물리적으로 테이블이 분리되어야 하는지에 대해 생각해보아야 한다.
더보기
@OneToMany
일대다 관계를 나타내는 매핑정보
속도를 위해 기본적으로 FetchType설정이 LAZY로 설정되어 있습니다.
속성
maappedBy | 연관관계의 주인 필드를 선택 |
fetch | 글로벌 페치 전략 설정 |
cascade | 영속성 전이 기능을 사용 |
targetEntity | 연관된 엔티티의 타입정보를 설정한다. |
// 일대다 단방향 관계
@Entity(name = "parent")
public class Parent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany
@JoinColumn(name = "parent_id")
private List<Child> childList;
}
@Entity(name = "child")
public class Child {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "parent_id")
private Long parentId;
}
// 일대다 양방향 관계는 없음!
// 대신, 다대일 양방향 관계
@Entity(name = "parent")
public class Parent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy="parent")
private List<Child> childList;
}
@Entity(name = "child")
public class Child {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "parent_id")
private Parent parent;
}
더보기
@JoinColum
외래 키 매핑 시 사용 (join을 요청하기 위한 매핑정보로 사용)
@ManyToOne 어노테이션과 주로 함께 사용
어노테이션을 생략해도 외래 키가 생성된다.
더보기
@ManyToMany
다대다 관계를 나타내는 매핑 정보 (N:M)
다대다 설정을 하게되면 중간 매핑테이블(JoinTable)이 자동으로 생성된다.
중간 매핑 테이블은 JPA상에서 숨겨져서(Entity 정의 없이) 관리된다.
매핑 테이블 관리가 불가능 하여서 실무에서는 잘 사용하지 않는 기능이다.
@Entity
public class Parent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "parent")
private List<ParentChild> parentChilds;
}
@Entity
public class ParentChild {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn("parent_id")
private Parent parent;
@ManyToOne
@JoinColumn("child_id")
private Child child;
}
@Entity
public class Child {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "child")
private List<ParentChild> parentChilds;
}
이렇게 관리를 한다.