-
오류 modelMapper has a non-private no-argument constructor.JPA 2022. 9. 3. 21:46반응형
- 오류나 발생한 곳
public TbUserDto insertUser(TbUserDto dto) { ModelMapper modelMapper = new ModelMapper(); return modelMapper.map(loginRepository.save(dto.toEntity()), TbUserDto.class); }
ModelMapper라는 것을 사용하여 데이터 저장 후 저장된 값을 Return 하려고 Dto <> Entity 변환 과정을하다 아래의 오류가 발생
TbUserDto has a non-private no-argument constructor.
※ TbUserDto는 내가 사용하는 Dto명임.
구글링 해보니 이 에러는 Dto에 기본 생성자가 없어 발생한 문제. 따라서, Dto에 기본 생성자를 만들어 문제를 해결하였음
기본생성자를 만들고 @Builder 어노테이션을 사용했던것이 문제의 발단.
최상단에 @Builder 를넣고
@AllArgsConstructor(파라미터가 없는 기본 생성자를 생성)
@NoArgsConstructor(모든 필드 값을 파라미터로 받는 생성자 생성)
그리고 위의 어노테이션 추가.
에러가 발생했던 Dto
Before
package kr.co.login.dto; import java.time.LocalDateTime; import kr.co.login.domain.TbUser; import lombok.Builder; import lombok.Data; @Data public class TbUserDto { private Long userNo; private String userId; private String userPw; private String userNm; private String userMail; private LocalDateTime userRegDt; private LocalDateTime userModDt; @Builder public TbUserDto(Long userNo, String userId, String userPw, String userNm, String userMail, LocalDateTime userRegDt, LocalDateTime userModDt) { this.userNo = userNo; this.userId = userId; this.userPw = userPw; this.userNm = userNm; this.userMail = userMail; this.userRegDt = userRegDt; this.userModDt = userModDt; } public TbUser toEntity(){ return TbUser.builder() .userNo(userNo) .userId(userId) .userPw(userPw) .userNm(userNm) .userMail(userMail) .userRegDt(userRegDt) .userModDt(userModDt) .build(); } }
After
@Data @AllArgsConstructor @NoArgsConstructor @Builder public class TbUserDto { private Long userNo; private String userId; private String userPw; private String userNm; private String userMail; private LocalDateTime userRegDt; private LocalDateTime userModDt; public TbUser toEntity(){ return TbUser.builder() .userNo(userNo) .userId(userId) .userPw(userPw) .userNm(userNm) .userMail(userMail) .userRegDt(userRegDt) .userModDt(userModDt) .build(); } }
반응형'JPA' 카테고리의 다른 글