본문 바로가기
인프런 강의/실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

일대일(OneToOne) 관계

by 해삼2 2024. 1. 19.
728x90
반응형
일대일(OneToOne) 관계

 

@Entity
public class Shop {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;

    @OneToOne(mappedBy = "shop")
    private Manager manager;

    // Getter, Setter, Constructors, etc.
}

@Entity
public class Manager {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @OneToOne
    @JoinColumn(name = "shop_id")
    private Shop shop;

    // Getter, Setter, Constructors, etc.
}

 

Shop 설명

 

1. @Entity: JPA 엔터티임을 나타냅니다.


2. @Id: 기본 키 필드를 나타냅니다.


3. @GeneratedValue: 기본 키를 자동으로 생성하는 전략을 설정합니다.


4. @OneToOne: 일대일 관계를 나타냅니다. 한 백화점은 하나의 매니저와만 관계를 맺습니다.
mappedBy = "shop": 양방향 관계에서 상대방 엔터티의 필드를 지정합니다. 

여기서는 Manager 엔터티의 shop 필드를 통해 관계가 맺어진다는 것을 나타냅니다.

 

Manager 설명

 

1. @Entity: JPA 엔터티임을 나타냅니다.


2. @Id: 기본 키 필드를 나타냅니다.


3. @GeneratedValue: 기본 키를 자동으로 생성하는 전략을 설정합니다.


4. @OneToOne: 일대일 관계를 나타냅니다. 한 매니저는 하나의 백화점과만 관계를 맺습니다.


5. @JoinColumn(name = "shop_id"): 관계를 맺을 대상 엔터티의 외래 키(Foreign Key)를 지정합니다.

 

이 예제에서는 Shop과 Manager 간의 일대일 양방향 관계를 설정하였습니다. 

Shop 엔터티의 manager 필드는 Manager 엔터티의 shop 필드와 연결되어 있습니다. 

이를 통해 특정 백화점은 하나의 매니저를 가지고, 각 매니저도 하나의 백화점에 속하는 관계가 형성됩니다.

 

 

*정리

백화점(Shop)은 하나의 매니저를 가지고, 각 매니저도 하나의 백화점에 속하는 관계인 일대일OneToOne 관계이며 한쪽에서 JoinColumn을 설정하면 다른 한쪽은 mappedBy를 사용 하는 것이 관례입니다. 
728x90
반응형