12-12 TIL

거북·2023년 12월 12일

TIL

목록 보기
14/22

연관관계

1대1 대응

외래키의 주인 엔티티에서 @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);
}

N대1 관계

단방향은 기존 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); // 외래 키(연관 관계) 설정
    }

N대M 관계

양방향

@ManyToMany어노테이션을 연결할 엔티티 모두에 추가해준다.

중간 테이블 추가

n 대 m관계 에서는 중간 테이블을 생성하여 관리해주면 변경 발생 시 컨트롤에 용이해서 확장성에 좋다.

기존 엔티티에는 @OneToMany어노테이션을 추가해주고 새로 만든 중간 테이블에 @ManyToOne으로 기존 엔티티들에 각각 연결시켜주는 방식이다.

0개의 댓글