Entity 연관 관계
1대1 관계
@OneToOne 1:1 관계를 맺어주는 역할
단방향 관계
Entity에서 외래 키의 주인은 일반적으로 N(다)의 관계인 Entity 이지만
1 대 1 관계에서는 외래 키의 주인을 직접 지정해야한다
외래 키 주인만이 외래 키 를 등록, 수정, 삭제할 수 있으며, 주인이 아닌 쪽은 오직 외래 키를 읽기만 가능함
@JoinColumn()은 외래 키의 주인이 활용하는 애너테이션
예시로 알아보자( 음식 Entity가 외래 키의 주인인 경우!)
@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;
}
고객 Entity가 외래 키의 주인인 경우!
@Entity
@Table(name = "food")
public class Food {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
}
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToOne
@JoinColumn(name = "food_id")
private Food food;
}
양방향 관계
방향 관계에서 외래 키의 주인을 지정해 줄 때 mappedBy 옵션을 사용
mappedBy의 속성값은 외래 키의 주인인 상대 Entity의 필드명을 의미
음식 Entity가 외래 키의 주인인 경우!
@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;
}
고객 Entity가 외래 키의 주인인 경우!
@Entity
@Table(name = "food")
public class Food {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
@OneToOne(mappedBy = "food")
private User user;
}
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToOne
@JoinColumn(name = "food_id")
private Food food;
}
N 대 1 관계
@ManyToOne 애너테이션은 N 대 1 관계를 맺어주는 역할
단방향관계, 음식 Entity가 N의 관계로 외래 키의 주인
@Entity
@Table(name = "food")
public class Food {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
@ManyToOne
@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;
}
양방향 관계, 음식 Entity가 N의 관계로 외래 키의 주인
@Entity
@Table(name = "food")
public class Food {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
@ManyToOne
@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;
@OneToMany(mappedBy = "user")
private List<Food> foodList = new ArrayList<>();
}
'TIL' 카테고리의 다른 글
TIL - 2024/05/29 (2) | 2024.05.29 |
---|---|
TIL - 2024/05/28 (0) | 2024.05.28 |
TIL - 2024/05/24 (0) | 2024.05.24 |
TIL - 2024/05/23 (0) | 2024.05.23 |
TIL - 2024/05/22 (0) | 2024.05.22 |