728x90
반응형
일대일
양쪽이 서로 하나의 관계만을 가진다
일대일 관계에서는 주 테이블과 대상 테이블 어느 곳이나 외래 키를 가질 수 있다
주 테이블에 외래 키
객체지향적 관점에서는 주 테이블에 외래 키가 있는 것을 선호한다
단방향
@Entity
public class Member {
@Id @GeneratedValue
@Column(name="MEMBER_ID")
private Long id;
private String username;
@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을 사용했고, 외래 키 값이 유니크해야 하므로 데이터베이스에 유니크 제약 조건을 추가했다
양방향
@Entity
public class Locker {
@Id @GeneratedValue
@Column(name="LOCKER_ID")
private Long id;
private String name;
@OneToOne(mappedBy="locker")
private Member member;
...
}
양방향이므로 연관관계의 주인을 정해야 하는데, 외래 키를 가지고 있는 Member.locker를 연관관계의 주인으로 한다
대상 테이블에 외래 키
단방향
일대일 관계 중 대상 테이블에 외래 키가 있는 단방향 관계는 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;
...
}
주 엔티티 대신 대상 엔티티를 연관관계의 주인으로 만들어 대상 엔티티에서 외래 키를 관리하도록 했다
728x90
반응형
'스터디 > JPA' 카테고리의 다른 글
고급 매핑 - (1) (0) | 2025.02.11 |
---|---|
다양한 연관관계 매핑 - (3) (0) | 2025.02.11 |
다양한 연관관계 매핑 - (1) (0) | 2025.02.10 |
연관관계 매핑 기초 - (2) (0) | 2025.02.09 |
연관관계 매핑 기초 - (1) (0) | 2025.02.09 |