콘텐츠로 이동

2022 08 14

2022-08-14

Jpa @JoinColumn & mappedBy

  • mappedBy
    • 개요
      • 이런 다대일 연관관계를 양방향으로 만들기 위해서는, 참조하는 측을 정의해야함
      • mappedBy 속성으로 해당 기능을 만들어 줄 수 있음
      • mappedBy의 값은 owning-side의 연관관계 매핑의 속성임
  • 예시
    @Entity
    @Getter @Setter
    @NoArgsConstructor(access = AccessLevel.PROTECTED)
    @ToString(of = {"id", "username", "age"})
    public class Member {
        @Id @GeneratedValue
        @Column
        private Long id;
        private String username;
        private int age;
    
        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "team_id")
        private Team team;
    
        public Member(String username) {
            this(username, 0);
        }
    
        public Member(String username, int age) {
            this(username, age, null);
        }
    
        public Member(String username, int age, Team team) {
            this.username = username;
            this.age = age;
            if (team != null) {
                changeTeam(team);
            }
        }
    
        public void changeTeam(Team team) {
            this.team = team;
            team.getMembers().add(this);
        }
    }
    
    @Entity
    @Getter @Setter
    @NoArgsConstructor(access = AccessLevel.PROTECTED)
    @ToString(of = {"id", "name"})
    public class Team {
        @Id @GeneratedValue
        @Column
        private Long id;
        private String name;
    
        @OneToMany(mappedBy = "team")
        private List<Member> members = new ArrayList<>();
    
        public Team(String name) {
            this.name = name;
        }
    }