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 |
Tags
- MySQL
- MySQL시작하기
- String
- springMVC
- pagination
- CloutNative
- MYSQL에러
- 우분투에war배포
- Postman
- VUE
- Seek_Keyset
- restful api
- spring
- Lombok
- wappalyzer
- intellij
- offset
- 이클립스
- windows10
- appleM1
- frontend
- Java
- minikube
- gradle
- K8S
- DB생성
- SpringBoot
- NullPointerException
- SQL
- 스프링에러
Archives
- Today
- Total
미운 오리 새끼의 우아한 개발자되기
[JPA] 다양한 연관관계 매핑 (3) 일대일 본문
일대일 관계는 양쪽이 서로 하나의 관계를 가진다.
예를 들어 회원은 하나의 사물함을 가지고, 사물함은 하나의 회원에 의해 사용된다.
고로, 일대다와 다대일에서 항상 다(N) 쪽이 FK 를 가졌으나, 일대일 관계에서는 FK 가 어디에 있든 상관없다.
주(main) 테이블이든 대상 테이블이든 FK 하나만 있으면 양쪽을 조회할 수 있다.
1.1. 주 테이블에 외래키
아래는 일대일 단방향, 주 테이블에 외래키가 있는 예제 코드이다.
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String username;
@OneToOne
@JoinColumn(name = "LOCKER_ID")
private Locker locker;
// Getter, Setter...
}
@Entity
public class Locker {
@Id @GeneratedValue
@Column(name = "LOCKER_ID")
private Long id;
private String name;
// Getter, Setter...
}
아래 예제 코드는 일대일 주 테이블에 외래 키, 양방향이다.
양방향이므로 연관관계 주인을 정해야 한다. FK를 가지고 있는 쪽이 주인이 된다.
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String username;
@OneToOne
@JoinColumn(name = "LOCKER_ID")
private Locker locker;
// Getter, Setter...
}
@Entity
public class Locker {
@Id @GeneratedValue
@Column(name = "LOCKER_ID")
private Long id;
private String name;
@OneToOne(mappedBy = "locker")
private Member member;
// Getter, Setter...
}
1.2. 대상 테이블에 외래 키
단방향
일대일 관계 중 대상 테이블에 외래키가 있는 단방향 관계는 JPA 에서 지원 x
양방향
일대일 매핑에서 대상 테이블에 외래 키를 두고 싶으면 이렇게 양방향으로 매핑한다.
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String username;
@OneToOne(mappedBy = "member")
private Locker locker;
// Getter, Setter...
}
@Entity
public class Locker {
@Id @GeneratedValue
@Column(name = "LOCKER_ID")
private Long id;
private String name;
@OneToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
// Getter, Setter...
}
Reference : 자바 ORM 표준 JPA 프로그래밍 (김영한 저)
'Spring & Spring Boot > Spring' 카테고리의 다른 글
[JPA] 고급 매핑 (1) 상속 관계 매핑 (0) | 2023.04.17 |
---|---|
[JPA] 다양한 연관관계 매핑 (2) 일대다 (0) | 2023.04.11 |
[JPA] 다양한 연관관계 매핑 (1) 다대일 (0) | 2023.04.11 |
[JPA] 연관관계 매핑 기초 (2) 양방향 연관관계 (0) | 2023.04.09 |
[JPA] 연관관계 매핑 기초 (1) 단방향 연관관계 (0) | 2023.04.09 |