[문제] 회원가입을 한 뒤에 생성된 객체의 id 값을 반환하게 로직을 구현했고, 이를 postman으로 테스트를 진행하였다. 테스트는 무사히 통과하는듯 싶었으나 responsebody 에 아무 응답없이 통과되었다. [원인] 잘못된 DB 설계 -> 상속관계에 대한 매핑 전략에서 자식 엔티티에 컬럼으로 id를 지정해줌으로써 생긴 문제. 전략을 단일 테이블 전략으로 진행했기 때문에 id 또한 user의 id를 가지고 오는게 맞으나 자식 엔티티에 있는 id 컬럼의 값을 가져왔기 때문에 null이 떴던 것. [해결] // ... @Entity @DiscriminatorValue("institution") public class Institution extends User { @Id @GeneratedValue(s..
JPA
[문제] 상속관계 Entity(User -> Individual, Institution)를 매핑하여 사용하여 Repository Test를 진행하던 도중 id로 객체를 찾아 일치하는지에 대한 여부를 확인하였는데 Optional.isPresent() 에서 에러가 발생한 상황 [원인] 로컬 DB에 연결 되어있는 것이 아니라 팀 공용 DB에 연결되어있어 매번 테스트를 진행할 때마다 Auto Increment가 진행되어 초기에 지정한 id로 객체를 찾아오지 못하던 것 [해결] 보통 Repository test에서 객체를 찾을 때, ddl-auto의 옵션에 create를 걸지 않는 이상 id로 컬럼을 찾지 않는다고 한다. 그래서 해당 객체가 가진 정보 중 username, email 등으로 찾으면 쉽게 테스트가 ..
[개요]최근 프로젝트를 진행하면서 User 객체를 나누어 설계하자는 말에 DB 설계를 진행하였다.JPA를 사용하면 Entity의 상속관계에 대해 매핑이 가능하다는 점은 알고 있었지만 평소 개발을 하면서 설계해서 사용할 상황이 안 됐던건지, 설계를 잘 못한 탓인지는 모르겠지만 Entity를 상속해서 DB 설계를 진행하지는 않았는데 이번에 처음 도입하면서 어려움이 몇몇 부분에서 드러나기 시작했다.처음 해보는 방법이라 테스트 코드를 작성하면서 많이 틀리기도 했던 부분들을 정리하려고 한다. [상속관계 매핑]우선 상속 매핑에 대해 간단하게 짚고 넘어가면 사실 관계형 데이터베이스(RDBMS)에서는 객체 지향에서 사용하는 상속 개념이 존재하지 않는다. 이를 제일 유사하게나마 표현할 수 있는게 Super 타입과 Sub..
[상황] @Query("SELECT rb.roadmap.title, rb.roadmap.user.username, COUNT(rb) AS bookmarkCount " + "FROM RoadmapBookmark rb " + "GROUP BY rb.roadmap.title, rb.roadmap.user.username " + "ORDER BY bookmarkCount DESC LIMIT 5") List findTop5ByRoadmapsWithBookmarkCount(); 북마크에 저장된 로드맵을 기반으로 로드맵의 제목, 작성자를 등록된 북마크의 개수 기반으로 검색한 뒤, 이를 리스트 형식으로 반환하기 위해서 @Query 어노테이션으로 JPQL을 작성하여 조회하는 메소드를 만들고 이를 사용했는데 아래와 같은 ..