Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[recap] 양방향 매핑에서 MappedBy가 필요한 이유 #10

Open
hoonyworld opened this issue Jul 24, 2024 · 0 comments
Open

[recap] 양방향 매핑에서 MappedBy가 필요한 이유 #10

hoonyworld opened this issue Jul 24, 2024 · 0 comments
Assignees
Labels
recap recap sec2 sec2

Comments

@hoonyworld
Copy link
Member

hoonyworld commented Jul 24, 2024

무엇을 알게 되었나요?

양방향 매핑

  • 양방향 매핑은 두 객체가 서로 참조해야 하는 상황에서 정의하는 연관관계 방식이다.
  • 실제로는 각각의 단방향 매핑이 존재하는 것이며 이를 합쳐 양방향을 의미한다.

MappedBy 사용 이유

image
  • 현재 Member와 Team은 N:1 관계이다.
  • 여기서 양방향 매핑을 적용한다면, Member 객체뿐만 아니라 Team 객체도 members 필드를 통해 MEMBER 테이블에 접근이 가능해지기 때문에 혼란이 생길 수 있다.
  • 그렇기 때문에 두 객체중 하나의 객체만 테이블을 관리할 수 있도록 정하는 것이 MappedBy 옵션이다. 그렇다면 어느 곳에 해당 옵션을 사용하는 게 좋을까?

MappedBy 위치

@Entity
public class Member { 

    @Id @GeneratedValue
    private Long id;
    
    @Column(name = "USERNAME")
    private String name;
    private int age;
    
    @ManyToOne
    @JoinColumn(name = "TEAM_ID")
    private Team team;
    
    … Getter, Setter 생략
}
@Entity
public class Team {

    @Id @GeneratedValue
    private Long id;
    private String name;
    
    @OneToMany(mappedBy = "team")
    List<Member> members = new ArrayList<Member>();

    … Getter, Setter 생략
}
  • 주인이 아닌 객체에 MappedBy를 적용해야 한다.
  • 예제에서는 Team 객체에 MappedBy가 적용되어 있는 것을 볼 수 있는데 이 경우에는 Team 객체는 MEMBER 테이블을 관리할 수 없고 Member 객체만이 권한을 받고 주인이 아닌 쪽은 읽기(조회)만 가능해진다. 즉, MappedBy가 정의되지 않은 객체가 주인(Owner)가 되는 것이다.
  • 일반적으로 외래키를 가진 객체를 주인으로 정의하는 것이 좋다.(외래키를 가진 Member 객체가 주인)

어려운 내용이 있었다면 이를 어떻게 해결하였나요?

x

어떤 자료를 참고하였나요?

https://velog.io/@wogh126/JPA-%EC%96%91%EB%B0%A9%ED%96%A5-%EB%A7%A4%ED%95%91%EC%97%90%EC%84%9C-MappedBy%EA%B0%80-%ED%95%84%EC%9A%94%ED%95%9C-%EC%9D%B4%EC%9C%A0

@hoonyworld hoonyworld added sec2 sec2 recap recap labels Jul 24, 2024
@hoonyworld hoonyworld self-assigned this Jul 24, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
recap recap sec2 sec2
Projects
None yet
Development

No branches or pull requests

1 participant