프로젝트
JPA외래키 설정시 데이터 입력 방향
A, B, C테이블이 있다. A oneToMany B C oneToMany B 이렇게 구성되어 있다. B테이블은 ManyToOne으로 양쪽 테이블과 연결되어 있다면 데이터를 삽입할 때 어느테이블에 삽입해야할까? 답은 부모테이블을 먼저 채운 후 자식 테이블을 채워야 한다. 만약 B테이블에 A테이블의 값을 넣고싶은 경우 A테이블에 값을 넣고 B테이블에 넣어야 한다. mappedBy는 보통 부모테이블에 셋팅한다. 예시를 들어보자 Perfume테이블과 PreferencePerfume테이블이 일대다 관계이다. @Getter @NoArgsConstructor @Entity public class Perfume { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) p..
데이터베이스 설계문제
사용자에게 선호 향수와 비선호 향수를 복수형으로 입력받는다. 선호 테이블과 비선호 테이블 두 개로 분할해서 진행하니 데이터 중복이 발생했다. 유저명 선호제품 이미지 aa 삼성 링크 aa 엘지 링크 bb 삼성 링크 유저명 비선호제품 이미지 aa 애플 링크 bb 엘지 링크 bb 애플 링크 처음에는 제품 id 제품명 이미지를 칼럼으로 가진 제품 테이블과 제품 id 유저명 선호 여부를 칼럼으로 가진 선호 제품 테이블로 분할하려 했지만 이렇게 분할해도 유저가 다르다면 제품 id와 선호 여부가 중복이 발생하기 때문에 따로 분할 작업은 하지 않았다. -조회에서 문제 발생 시간이 지나니 조회에서 문제가 발생했다. 조회 쿼리는 선호 제품 테이블을 기준으로 했기에 선호 제품에 등록되지 않고 비선호 제품에 제품을 등록한다면..
No converter found capable of converting from type [org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap] to type
상황 스프링 부트와 JPA를 사용 중 @Query문을 작성한 뒤 실행했는데 에러가 발생했다. JPA를 잘 알지 못해서 3일정도 걸렸다...ㅠ Entity: user id , perfumeName, image, email dto: perfumeName, countUserId, image 이런 식으로 엔티티를 조금 변형한 형식으로 받아야 했다. DTO: private String perfumeName; private String image; private int countPerfumeName; public PerfumeListResponseDto(FavoritePerfume entity, int countPerfumeName){ this.perfumeName = entity.getPerfumeName(); ..
no httpMessageConverter for
상황 ResponseEntity responseEntity = restTemplate.postForEntity(url, perfumeRequestDto, Long.class); restTemplate에서 에러가 발생했다. httpMessageConverter가 Dto에 없다는 뜻인데 기존에 잘 돌아가는 코드를 복붙 한 거라 어떤 부분에서 문제가 발생했는지 감을 잡지 못했다. 애꿎은 Service와 Controller를 건드려보고 구글에도 검색해봤지만 저 메시지와 동일한 에러가 없었다.그래서 오타로 인한 에러로 여기고 기존 코드와 내 코드를 자세히 비교해봤다. 해결 perfumeRequestDto에 @Getter @NoArgsConstructor 빠져서 발생한 에러였다. 기존 코드를 복붙 했지만 클래스명이..
should have [public, protected] no-arg constructor
상황 칼럼이 같은 DB 테이블이 2개 있다. id, userName, perfumeName, image로 구성되어 있고 각 칼럼마다 saveDto를 만드는것보다 합치는 것이 객체지향에 가깝다고 생각해 방법을 찾다가 @MapperdSuperclass를 발견했다. 이 테스트를 진행하니 builder부분이 없어서 에러가 발생했고 부모 클래스의 빌더를 활용하는 @SuperBuilder를 알게됐다. @SuperBuilder를 사용해 코드를 작성했지만 자식 클래스에서 should have [public, protected] no-arg constructor 가 발생했다. 시도해본 방안 자식 클래스에 생성자를 추가해봤는데 super()를 넣으라는 ide의 권고가 있었고 (넣지 않으면 에러 발생) 넣고 부모 클래스 형..
java.net.UnknownHostException
java.net.UnknownHostException: localhost1956 상황 등록기능 테스트 진행중 발생했다. 뒤의 localhost숫자는 랜덤하게 변경된다. Create을 만들고 Junit의 TestRestTemplate과 LocalServerPort를 생성해 http://localhost" + port + "/api/v1/pre 로 요청했는데 ResponseEntity responseEntity = restTemplate.postForEntity(url, preRequestDto, Long.class); 이곳에서 발생했다. 전에 스프링 부트와 AWS로 혼자 구현하는 웹 서비스에서 클래스 명만 다르고 나머지는 같은 프로젝트를 진행할 땐 발생하지 않았는데 이번에는 왜 발생했는지 모르겠다. 시도해..