@ManyToOne 어노테이션은 N:1 관계를 맺어준다.
@OneToOne을 @ManyToOne로 수정하면 1:1 관계와 동일한 형태로 사용한다.
@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<>();
public void addFoodList(Food food) {
this.foodList.add(food);
food.setUser(this); // 외래 키(연관 관계) 설정
}
}
외래 키의 주인 Entity는 사실상 1:1과 동일하지만, 비주인 Entity는 private Food food;던 형태에서
private List foodList = new ArrayList<>();로 리스트 형태로 변했다.
이게 바로 N:1 관계이기 때문인데, 외래 키의 주인을 여러번 참조하기 때문에 리스트 형태로 받는것이다.
이후 이 List는 자바 내에서 사용되기 때문에 메소드로 기능을 구현해서 사용한다.
User user = new User();
user.setName("Robbie");
user.addFoodList(food);
user.addFoodList(food2);
이 코드를 통해 List에 저장하고, 추후 get메소드를 통해 해당 리스트를 받고 for문으로 출력을 진행하면 된다.