본문 바로가기
Spring

[Spring] MapStruct를 이용한 DTO <-> Entity 사용시 조인관계 매핑

by Apère 2023. 3. 1.
반응형

기본적은 MapStruct 설정은 이전글 https://apere.tistory.com/10 을 참고해주세요

 

이번글에서는 아래처럼 Member와 Team Entity가 관계를 가질경우 MemberDTO에서 Member로 변환시 간단하게 구현하는 방법입니다

 

public class Team {
    @Id
    @GeneratedValue
    @Column(name = "team_id")
    private Long id;

    @Column(name = "team_name")
    private String teamName;

    @JsonIgnore
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "team")
    private List<Member> members = new ArrayList<>();
}


public class Member {
    @Id
    @GeneratedValue
    @Column(name = "member_id")
    private Long id;

    @Column(name = "member_name", nullable = false)
    private String memberName;

    private int age;

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

위의 코드처럼 Member Entity에 Team 객체가 있기때문에 DTO와 타입 불일치가 일어납니다

public class MemberDTO {

    private final String memberName;
    private final int age;
    private final Long teamId;

}

이런 타입불일치는 MapStruct의 @Mapping 설정으로 간단하게 처리할 수 있습니다

 

 

@Mapper(componentModel = "spring")
public interface MemberMapper extends EntityMapper<MemberDTO, Member> {
    MemberMapper MAPPER = Mappers.getMapper(MemberMapper.class);

    @Override
    @Mapping(source = "teamId", target = "team.id")
    Member toEntity(MemberDTO memberDTO);
}

 

필요할경우 추가적으로 toDto에도 source와 target을 반대로 할경우 처리되니 참고해주세요

반응형

댓글