일대일

일대일

주 테이블에 외래 키

단방향

회원 엔티티

@Entity
class Member(

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "MEMBER_ID")
    val id: Long = 0L,

    val username: String,

    @OneToOne
    @JoinColumn(name = "LOCKER_ID")
    val locker: Locker
)

사물함 엔티티

@Entity
class Locker(

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "LOCKER_ID")
    val id: Long = 0L,

    val name: String
)

양방향

회원 엔티티

@Entity
class Member(

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "MEMBER_ID")
    val id: Long = 0L,

    val username: String,

    @OneToOne
    @JoinColumn(name = "LOCKER_ID")
    val locker: Locker
)

사물함 엔티티

@Entity
class Locker(

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "LOCKER_ID")
    val id: Long = 0L,

    val name: String,
    
    @OneToOne(mappedBy = "locker")
    val member: MEMBER
)

대상 테이블에 외래 키

단방향

주 테이블에서 대상 테이블을 찾을 수 없기 때문에 주 테이블과 대상 테이블의 방향을 수정하거나 양방향 관계로 대상 테이블을 연관관계의 주인으로 설정해야 한다.

양방향

회원 엔티티

@Entity
class Member(

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "MEMBER_ID")
    val id: Long = 0L,

    val username: String,

    @OneToOne(mappedBy = "member")
    val locker: Locker
)

사물함 엔티티

@Entity
class Locker(

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "LOCKER_ID")
    val id: Long = 0L,

    val name: String,
    
    @OneToOne
    @JoinColumn(name = "MEMBER_ID")
    val member: MEMBER
)

자식 테이블의 기본 키 값으로 부모 테이블의 키 값만 사용한다면

게시판 엔티티

@Entity
class Board(

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "BOARD_ID")
    val id: Long = 0L,

    val title: String,

    @OneToOne(mappedBy = "board")
    val boardDetail: BoardDetail
)

게시판 상세 엔티티

@Entity
class BoardDetail(

    @Id
    val boardId: Long = 0L,

    val content: String,
    
    @MapsId // BoardDetail.boardId 매핑
    @OneToOne
    @JoinColumn(name = "BOARD_ID")
    val board: Board
)

@MapsId는 @Id를 사용해서 식별자로 지정한 BoardDetail.boardId와 매핑된다.