일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Transaction not successfully started
- fixedDelay
- 네이버 연결된 서비스
- JPA
- @Table
- anyMatch
- SpringBoot
- DB방언
- Git
- HTTP3
- 네이버로그인API
- hibernate.dialect
- KAKAOLOGINAPI
- 데이터베이스 방언
- Invalid bound statement (not found)
- gitrevert
- 김영한JPA
- 자바ORM표준프로그래밍
- HTTPMESSAGE
- 캐쉬가능
- 매핑정보가없는필드
- ERROR TYPE : org.apache.ibatis.binding.BindingException
- gitreset
- 멱등활용
- initialDelay
- org.apache.ibatis.binding.BindingException
- @Entity
- 무상태프로토콜
- RFC723x
- http
Archives
- Today
- Total
twocowsong
주 테이블 외래 키 본문
1 : 1 관계를 구성할 때 객체지향 개발자들은 주 테이블에 외래 키가 있는것을 선호합니다.
JPA도 주 테이블에 외래 키가 있으면 좀더 편리하게 매핑할 수 있습니다.
단방향
회원과 사물함의 1 : 1 단방향 관계를 알아보겠습니다.
MEMBER가 주 테이블이고 LOCKER는 대상 테이블입니다.
@Entity
@Table(name = "MEMBER")
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
@Table(name = "LOCKER")
public class Locker {
@Id
@GeneratedValue
@Column(name = "LOCKER_ID")
private Long id;
private String name;
}
1 : 1 관계이므로 객체 매핑에 @OneToOne을 사용하였습니다.
DB에는 LOCKER_ID 외래키에 유니크 제약조건을 추가했습니다.
참고로 이 관계는 N : 1 단방향과 거의 비슷합니다.
다음으로 반대 방향을 추가해서 1 : 1 양방향 관계로 만들어보겠습니다.
@Entity
@Table(name = "LOCKER")
public class Locker {
@Id
@GeneratedValue
@Column(name = "LOCKER_ID")
private Long id;
private String name;
@OneToOne(mappedBy = "locker")
private Member member;
}
LOCKER 테이블에 member 필드를 추가하였습니다.
양방향이므로 연관관계의 주인을 정해야합니다.
MEMBER테이블이 외래 키(Member.Locker_id)를 가지고 있으므로 Member.locker이 연관관계의 주인입니다.
따라서 반대 매핑인 사물함의 Locker.member은 mappedBy를 선언해서 연관관계의 주인이 아니라고 설정했습니다.
'IT > JPA' 카테고리의 다른 글
다 대 다 [N : N] (0) | 2022.06.20 |
---|---|
대상 테이블에 외래 키 (0) | 2022.06.19 |
일 대 일 [ 1 : 1 ] (0) | 2022.06.18 |
일 대 다 양방향 (0) | 2022.06.14 |
일 대 다 (0) | 2022.06.13 |