외래키의 주인 엔티티에서 @JoinColumn 어노테이션 사용
단방향 일 때는 자식 엔티티에서는 아무 조치 필요 없으나 양방향일때는 어노테이션을 추가해주어야함!
//Food.java
@OneToOne
@JoinColumn(name = "user_id")
private User user;
기본적으로 외래키의 주인만이 제어할 수 있다
양방향일시 추가할 부분
//User.java
@OneToOne(mappedBy="user") //상대(주인) 엔티티의 필드명
private Food food;
//외래키 주인이 아닌쪽에서 넣으려면 다음과 같은 매소드를 추가해야함
private void addFood(Food food){
this.food = food;
food.setUser(this);
}
단방향은 기존 1대1 관계와 동일하지만 양방향일때 약간의 차이점이 생긴다
//Food.java (주인)
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
//User.java
@OneToMany(mappedBy = "user")
private List<Food> foodList = new ArrayList<>();
public void addFoodList(Food food) {
this.foodList.add(food);
food.setUser(this); // 외래 키(연관 관계) 설정
}
@ManyToMany어노테이션을 연결할 엔티티 모두에 추가해준다.
n 대 m관계 에서는 중간 테이블을 생성하여 관리해주면 변경 발생 시 컨트롤에 용이해서 확장성에 좋다.
기존 엔티티에는 @OneToMany어노테이션을 추가해주고 새로 만든 중간 테이블에 @ManyToOne으로 기존 엔티티들에 각각 연결시켜주는 방식이다.