상황
칼럼이 같은 DB 테이블이 2개 있다. id, userName, perfumeName, image로 구성되어 있고 각 칼럼마다 saveDto를 만드는것보다 합치는 것이 객체지향에 가깝다고 생각해 방법을 찾다가 @MapperdSuperclass를 발견했다.
이 테스트를 진행하니 builder부분이 없어서 에러가 발생했고 부모 클래스의 빌더를 활용하는 @SuperBuilder를 알게됐다.
@SuperBuilder를 사용해 코드를 작성했지만 자식 클래스에서 should have [public, protected] no-arg constructor 가 발생했다.
시도해본 방안
자식 클래스에 생성자를 추가해봤는데 super()를 넣으라는 ide의 권고가 있었고 (넣지 않으면 에러 발생) 넣고 부모 클래스 형태로 super의 인자로 넣었더니 마찬가지로 should have [public, protected] no-arg constructor가 발생했다.
superBuilder를 삭제하고 자식 클래스에만 Builder를 선언해도 부모 클래스에 칼럼들이 선언되어있기 때문에 값을 넣을 수 없었다.
Entity클래스라서 변화를 주기 쉽지 않았다.
해결
부모와 자식 클래스에 @NoArgsConstructor를 추가하니 해결됐다. 이 방법을 생각하지 못 한 이유를 복기해보니
JPA에 대해 잘 모르는 상태에서 Entity는 상속과 인터페이스 구현체가 되면 안 된다는 글을 봤다.
질문을 통해 @MappedSuperclass @SuperBuilder 두 가지의 해결책을 알게 됐지만 모르는 기능이 계속 추가되는 것에 두려움을 느껴 경직된 사고를 한 것 같다.
'프로젝트 > 향수' 카테고리의 다른 글
JPA외래키 설정시 데이터 입력 방향 (0) | 2022.02.16 |
---|---|
데이터베이스 설계문제 (0) | 2021.11.22 |
No converter found capable of converting from type [org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap] to type (1) | 2021.09.02 |
no httpMessageConverter for (0) | 2021.08.25 |
java.net.UnknownHostException (0) | 2021.08.18 |