Spring
스파르타 부트캠프 Spring Master 3강 Entity @ManyToOne 단방향, 양방향 정리
H.S-Backend
2024. 5. 28. 20:19
반응형
N대 1관계 = @ManyToOne

음식 Entity가 N의 관계로 외래키의 주인
@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;
}
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}

양방향 관계에서는
양방향 참조를 위해 고객 Entity에서 Java 컬렉션을 사용하여
음식 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;
}
@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); // 외래 키(연관 관계) 설정
}
}
외래키의 주인은 Food(Many)
mappedBy를 사용하여 양방향관계를 맺고
<Food>제네릭을 사용하여
foodList를 생성자로 선언하고
addFoodList의 input값을 food로 전달받아서
foodList에 add을 한다.
해서 똑같이
food.setUser 메서드를 사용하여 this=User 를 지칭함으로
User클래스에서도 Food의 List를 출력할 수 있다.(양방향)
@ManyToOne
결국은 User가 한명인데 여러개의 Food를 주문했었다면
해당 User Id를 조회하면
주문했던 FoodList가 나오게하는것
으로 이해하면 쉽다.

반응형