본문 바로가기
Spring

[TIL] 240409 Entity 연간 관계 | 1:1 매핑, 단방향, 양방향

by studymode 2024. 4. 9.

1:N에서는 외래키의 주인은 N쪽에 있음

1:1관계에서는 지정해줘야함 (외래키를 가지고 있는 쪽이 주인)

 

외래키의 주인

외래키를 등록, 삭제, 수정 가능

외래키의 주인이 아니면 읽기만 가능

 

1:1관계 (단반향)

 

 

🔽 음식 (외래키의 주인)

@Entity
@Table(name = "food")
public class Food {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private double price;

    @OneToOne
    @JoinColumn(name = "user_id")
    private User user;
}

 

 

🔽 고객

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
}

 

 

 

1:1 양방향의 경우

🚨주의! 외래키의 주인이 아닌쪽에서 지정!!

아닌 쪽에서 mapped by = 외래케의 주인이 갖고있는 외래키 필드명

 

 

🔽 음식 (외래키의 주인)

@Entity
@Table(name = "food")
public class Food {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private double price;

    @OneToOne
    @JoinColumn(name = "user_id")
    private User user;
}

 

🔽 고객 

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

    @OneToOne(mappedBy = "user")
    private Food food;
}

 

🚨주의! 외래키의 주인이 아닌쪽에서 지정!!

아닌 쪽에서 mapped by = 외래케의 주인이 갖고있는 외래키 필드명

 

mappedBy로 외래키의 주인을 알려주지않으면

Jpa에서는 임의로 중간테이블을 생성하게 되기때문에

꼭 mappedBy로 외래키의 주인 명시하기!!