엔티티 클래스

Untitled

여러개의 Member 가 Team 에 소속될 수 있도록 설계했습니다.

ERD

Untitled

Member 와 Team 은 다대일 (N:1) 관계이며,

Team 과 Member 는 일대다 (1:N) 관계입니다.

DB에서는 FK 가 다(N) 에 들어가야 합니다. 그래서 Member 안에 team_id(FK) 를 가지고 있죠.

Member 엔티티

@Entity
@Getter
@Setter //...2
@NoArgsConstructor(access = AccessLevel.PROTECTED) //...3
@ToString(of = {"id", "username", "age"}) //...4
public class Member {

    @Id
    @GeneratedValue
    @Column(name = "member_id") //...1
    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) { //...5
        this.team = team;
        team.getMembers().add(this);
    }

}

  1. @Column

  2. @Setter 는 실무에서 가급적 Setter는 사용하지 않는게 좋습니다. → 참고

  3. @NoArgsConstructor(access = AccessLevel.PROTECTED)

    자세히

  4. @ToString은 가급적 내부 필드만(연관관계 없는 필드만) 적용하는게 좋습니다.

  5. changeTeam()

    자세히