Home JPA @OneToMany, @ManyToOne
Post
Cancel

JPA @OneToMany, @ManyToOne

@ManyToOne 단방향

하기전에 @JoinColumn 과 @OneToMany(mappedBy = *) mappedBy를 이해하고 넘어가야한다.

  • @JoinColumn @JoinColumn의 경우 @ManyToOne 어노테이션을 통해 다대일 연관관계를 매핑할 때 사용하는데 대상에 해당하는 @Column에 해당하는 name값을 입력하면 된다.

  • @OneToMany(mappedBy = * ) mappedBy의 경우 @OneToMany 어노테이션을 통해 일대다 연관관계를 매핑할 때 사용하는데 이도 마찬가지로 매핑대상이 되는 @Column name값을 입력하면 된다.

ERD

1
2
3
4
5
6
7
8
9
10
11
@Entity
@Table(name= "Members")
public class Member{
    @Id
    @Column(name = "member_id")
    private String id;
    @ManyToOne
    @JoinColumn(name = "team_id")
    private Team team;
    private String UserName;
}
1
2
3
4
5
6
7
8
@Entity
@Table(name= "Teams")
public class Team{
    @Id
    @Column(name= "team_id")
    private Long id;
    private String name;
}

단방향으로 맵핑할경우 Members는 team 엔티티를 참조할 수 있지만 반대로 team에서는 회원을 참조할수있는 필드가 없다.

@ManyToOne 양방향

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Entity
@Table(name= "Members")
public class Member{
    @Id
    @Column(name = "member_id")
    private String id;
    @ManyToOne
    @JoinColumn(name = "team_id")
    private Team team;
    private String UserName;
    public void setTeam(Team team){
        this.team = team;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Entity
@Table(name= "Teams")
public class Team{
    @Id
    @Column(name= "team_id")
    private Long id;
    private String name;
    @OneToMany(mappedBy = "team")
    private List<Member> members = new ArrayList<>();
    public void addMember(Member member){
        this.members.add(member);
        member.setTeam(this);
    }
}

양방향은 외래 키가 있는 쪽이 연관관계 주인이다. 외래 키의 경우 항상 N에 외래 키가 있다. 업로드 속도 테스트


This post is licensed under CC BY 4.0 by the author.