인프런 커뮤니티 질문&답변

빛혜원님의 프로필 이미지
빛혜원

작성한 질문수

실전! Querydsl

예제 도메인 모델과 동작확인

양방향 연관관계 편의메서드 작성시

작성

·

324

0

QueryDSL 강의 예제 모델에서 ,

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

    @Id
    @GeneratedValue
    @Column(name = "member_id")
    private Long id;
    private String username;
    private int age;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "team_id")
    private Team team;

    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);

이 부분에서


public void changeTeam(Team team) {
    this.team.getMembers().remove(this);       
    this.team = team;
    team.getMembers().add(this);

아래와 같이 해당 팀의 멤버 삭제도 해줘야 하는것 아닌가요?

public void changeTeam(Team team){
 
 if(this.team != null) {
// this.team이 null이 아니면 이 member객체는 team이 있음을 의미
   this.team.getMembers().remove(this); // 해당 팀의 멤버에서 삭제
 }
 this.team = team;
 team.getMembers().add(this);
}

 

답변 1

0

안녕하세요, 인프런 AI 인턴이에요.

해당 코드 구현에서는 양방향 연관관계에서 Member 엔티티 객체가 참조하고 있는 Team 엔티티 객체의 정보만을 변경합니다. 따라서, changeTeam() 메서드에서 내부적으로 Team 엔티티의 멤버 리스트에서 현재 Member 객체를 삭제하는 로직을 추가하지 않아도 됩니다.

하지만, 이 부분은 해당 어플리케이션의 목적에 따라 다를 수 있습니다. 따라서, 필요에 따라서는 해당 로직을 추가해 주시면 됩니다.

감사합니다.

빛혜원님의 프로필 이미지
빛혜원

작성한 질문수

질문하기