Reference. 자바 ORM 표준 JPA 프로그래밍
책 목차 및 이전 글
더보기
들어가기 전 JPA 특징, Q&A
1. JPA 소개
3. 영속성 관리
4. 엔티티 매핑
4.1 - 4.3 @Entity, @Table, 다양한 매핑
4.4 - 4.5 데이터베이스 스키마 자동 생성, DDL 생성 기능
5. 연관관계 매핑 기초
6. 다양한 연관관계 매핑
일대일 관계의 특징
- 일대일 관계는 그 반대도 일대일 관계
- 테이블 관계에선 일대다, 다대일은 항상 다(N)쪽이 외래키를 가짐
일대일은 주테이블, 대상테이블 어느 곳이나 외래키를 가질 수 있음 ( 외래키 선택 필요 )
- 주 테이블에 외래키
- 주 테이블에 외래 키를 두고 대상 테이블을 참조
- 외래 키를 개체 참조와 비슷하게 사용함으로 객체지향 개발자들이 선호
- 장점: 주 테이블이 외래 키를 가지므로 주테이블을 통해 대상 테이블 관계 확인 가능
- 대상 테이블에 외래키
- 전통적인 DB 개발자들은 대상 테이블에 외래 키를 두는 것을 선호
- 장점: 테이블 관계를 일대일 → 일대다로 변경할 때 테이블 구조를 그대로 유지
- 주 테이블에 외래키
6.3.1 주 테이블에 외래 키
- 객체지향 개발자들은 주 테이블에 외래키가 있는 것을 선호
- JPA도 주 테이블에 외래 키가 있으면 편리하게 매핑 가능
단방향
- 회원과 사물함은 일대일 단방향 관계, MEMBER가 주테이블이고 LOCKER는 대상테이블
코드를 통한 단방향 예제 코드
- 다대일 단방향(@ManyToOne)과 유사
@Entity public class Member { ... @OneToOne @JoinColumn(name = "LOCKER_ID") private Locker locker } @Entity public class Locker { @Id @GeneratedValue @Column(name = "LOCKER_ID") private Long id; private String name; ... }
양방향
- 양방향이므로 연관관계 주인을 지정
MEMBER
테이블이 외래 키를 가지므로Member.locker
가 연관관계의 주인
- 반대 매핑인 사물함의
Locker.member
는mappedBy
를 선언하여 주인이 아님을 설정코드를 통한 양방향 예제 코드
@Entity public class Member { ... @OneToOne @JoinColumn(name = "LOCKER_ID") private Locker locker } @Entity public class Locker { @Id @GeneratedValue @Column(name = "LOCKER_ID") private Long id; private String name; @OneToOne(mappedBy = "locker") private Member member; ... }
6.3.2 대상 테이블에 외래키
단방향
- 일대일 관계에선 대상 테이블에 외래 키가 있는 단방향 관계는 JPA 지원하지 않음
- 아래의 그림처럼 매핑할 방법이 없고, 양방향 관계를 설정해야 가능
양방향
코드를 통한 양방향 예제 코드
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String username;
@OneToOne(mappedBy = "member")
private Locker locker
}
@Entity
public class Locker {
@Id @GeneratedValue
@Column(name = "LOCKER_ID")
private Long id;
private String name;
@OneToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
...
}
'개발서적 > 자바 ORM 표준 JPA' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍] 7.1 상속 관계 매핑 (0) | 2021.08.18 |
---|---|
[자바 ORM 표준 JPA 프로그래밍] 6.4 다대다 (0) | 2021.08.18 |
[자바 ORM 표준 JPA 프로그래밍] 6.2 일대다 (0) | 2021.08.18 |
[자바 ORM 표준 JPA 프로그래밍] 6.1 다대일 (0) | 2021.08.18 |
[자바 ORM 표준 JPA 프로그래밍] 5.3 양방향 연관관계 (0) | 2021.08.12 |