Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- Spring Security
- concurrentsessionfilter
- 객제지향 쿼리 언어
- 임베디드 타입
- orphanRemovel
- @MappedSuperclasss
- form login
- SessionManagementFilter
- 다대다
- AnonymousAuthenticationFilter
- 양방향 매핑
- 동시 세션 제어
- MySQL
- TABLE
- 기본값 타입
- JPQL
- field column mapping
- 값 타입 비교
- 값 타입 컬렉션
- spring jpa
- 상속관계 매핑
- 즉시 로딩
- 지연 로딩
- 세션 고정 보호
- Database
- jpa
- Remember-me
- 세션 생성 정책
- 기본 키 매핑
- ddl-auto
Archives
- Today
- Total
hoondev
[Spring JPA] 일대일 관계 본문
일대일 관계
일대일 관계는 주 테이블과 대상테이블중에 외래키를 어디 넣을지 선택이 가능하다.
일대일 관계로 Member와 Locker를 들 수 있다. 둘다 서로를 1개씩만 가지고 있기 때문에 일대일 관계로 매핑할 수 있다.
주 테이블에 외래키
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
@Column(name = "USERNAME")
private String name;
@OneToOne
@JoinColumn(name = "LOCKER_ID")
private Locker locker;
…
}
@Entity
public class Locker {
@Id @GeneratedValue
private Long id;
@OneToOne(mappedBy = "locker")
private Member member
...
}
다대일, 일대다와 마찬가지로 mappedBy로 양방향 관계를 이룰 수 있다. 이 member는 읽기 전용 필드이다.
여기서도 마찬가지로 외래키가 있는 쪽이 연관관계의 주인이다.
이 방법의 장점은 주 테이블만 조회해도 대상 테이블에 데이터가 있는지 확인이 가능하다.
단점은 값이 없으면 외래키에 null을 허용해야 한다.
대상 테이블에 외래키
대상 테이블에 외래키가 있는 경우의 단방향은 지원하지 않는다.
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
@Column(name = "USERNAME")
private String name;
@OneToOne(mappedBy = "member")
private Locker locker;
…
}
@Entity
public class Locker {
@Id @GeneratedValue
private Long id;
@OneToOne
@JoinColumn(name = "MEMBER_ID")
private Member member
...
}
양방향은 위에 있는 주 테이블에 외래키가 있을때의 양방향을 반대로 뒤집은 상태로 가능하다.
여기서는 연관관계의 주인이 member가 되고 Locker의 locker는 읽기 전용 필드로 설정된다.
이방법의 장점은 주 테이블과 대상 테이블을 일대일에서 일대다 관계로 변경할 때 테이블 구조를 유지할 수 있다.
단점은 기본 프록시의 기능 한계로 지연로딩으로 설정해도 항상 즉시로딩으로 동작한다는 단점이다.
Reference
'Spring JPA' 카테고리의 다른 글
[Spring JPA] 상속관계 매핑 (0) | 2023.01.30 |
---|---|
[Spring JPA] 다대다 관계 (0) | 2023.01.29 |
[Spring JPA] 일대다 관계 (0) | 2023.01.27 |
[Spring JPA] 다대일 관계 (0) | 2023.01.26 |
[Spring JPA] 양방향 연관관계 (0) | 2023.01.25 |
Comments