Spring

7. 스프링 / 2021-07-18 (연관관계 매핑 )

공대키메라 2021. 7. 18. 20:08

 

고려사항 3가지

 

1. 다중성 (@OneToMany, @ManyToOne, @OneToOne, @ManyToMany)

2. 단방향, 양방향

 

 

3. 연관관계의 주인

 

 

package jpabook.jpashop.domain;

import javax.persistence.*;
import java.util.ArrayList;

@Entity
public class Member {

    @Id @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;

    @Column(name = "USERNAME")
    private String name;

    @ManyToOne
    @JoinColumn(name = "TEAM_ID") // 우선 ManyToOne 그러니까
    //Member가 여러명이고 그 여려명이 Team에 소속됨.
    private Team team;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Team getTeam() {
        return team;
    }

    public void setTeam(Team team) {
        this.team = team;
    }

    @Override
    public String toString() {
        return "Member{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", team=" + team +
                '}';
    }
}

 

package jpabook.jpashop.domain;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Entity
public class Team {

    @Id @GeneratedValue
    @Column(name = "TEAM_ID")
    private Long id;
    private String name;

    @OneToMany(mappedBy = "team") // Member에서 연결해야 되는 변수명 그대로 선언
    private List<Member> members = new ArrayList<>();

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


}

 

일대다 단방향은 추천하지 않고 실무에서도 거의 쓰지 않는단다!

다만 지원해주기에 그냥 우선 본다

 

웃긴게 Team Table에 있는것을 관리하는데 MEMBER가 변경됨

 

그러면 어? 나는 Team에 건드렷는데 왜 Member table 에 update문이 나가지? 하는거임

 

그래서 Member에 단방향을 추가해서 양방향으로 변경한다고 한다.