JPA
오류 modelMapper has a non-private no-argument constructor.
dev.mk
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();
}
}
반응형