다양한 연관관계 매핑(2) - slahsk/study GitHub Wiki
일대일[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;
}
@Entity
public class Locker{
@Id
@GeneratedValue
@Column(name="LOCKER_ID")
private Long id;
private String name;
}
양방향
@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(mappedBy = "locker")
private Member member;
}
대상 테이블에 외래 키(데이터베이스 개발자 선호)
테이블 관계를 일대일에서 일대다로 변경할 때 테이블 구조를 그대로 유지할 수 있다.
단방향 없음 불가
양방향
@Entity
public class Member{
@Id
@GeneratedValue
@Column(name="MEMBER_ID")
private Long id;
private String username;
@OneToOne
private Locker locker;
}
@Entity
public class Locker{
@Id
@GeneratedValue
@Column(name="LOCKER_ID")
private Long id;
private String name;
@OneToOne(mappedBy = "locker")
@JoinColumn(name = "MEMBER_ID")//외래키는 여기에서 관리 연관관계 주인
private Member member;
}