Java & Spring/Spring
31일차 - Spring강의(Entity 연관 관계)
DJ.Kang
2024. 8. 27. 21:22
□ 1 대 1 관계(@OneToOne)
▷ 단방향 관계
- 외래 키 주인 정하기 : 1대1 관계에서는 외래 키 주인을 직접 지정해야한다.
- 외래 키의 주인만 외래 키를 등록, 수정, 삭제 할 수 있다.
- 주인이 아닌 쪽은 읽기만 가능하다.
- 음식 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 코드
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
- 주인 쪽에 @OneToOne 애노테이션과 @JoinColumn(name = "user_id"), 고객객체를 필드로 가진다.
▷ 양방향 관계
- 양방향 관계에서 외래 키의 주인을 지정 할 때 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 코드
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToOne(mappedBy = "user")
private Food food;
}
□ N 대 1 관계(@ManyToOne)
▷ 단방향 관계
- 음식 Entity 코드
@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 코드
@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;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
}
- 고객 Entity 코드
@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<>();
}
□ 1 대 N 관계
▷ 단방향 관계
- 음식 Entity 코드
package com.sparta.jpaadvance.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
@Entity
@Getter
@Setter
@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 코드
package com.sparta.jpaadvance.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
@Entity
@Getter
@Setter
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
▷ 양방향 관계
- 고객 Entity 코드
package com.sparta.jpaadvance.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.util.ArrayList;
import java.util.List;
@Entity
@Getter
@Setter
@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<>();
public void addFoodList(Food food) {
this.foodList.add(food);
food.setUser(this); // 외래 키(연관 관계) 설정
}
}
□ N 대 M 관계