인프런 커뮤니티 질문&답변

이진님의 프로필 이미지
이진

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

처음 저장한 데이터가 조회가 안됩니다.

작성

·

283

0

안녕하세요. 현재 대학생이고 김영한님 강의를 본 후 프로젝트를 진행중입니다.
다름이 아니라, 현재 Tale과 Keyword의 다대다 연관관계를 피하기 위해 중간에 TaleKeyword라는 중간 테이블을 두었고, Tale은 Member 테이블과 일대일 연관관계를 설정해두었습니다.

동화(Tale)를 키워드, 회원정보에 끼워넣고 생성하는 API는 완성하였고 DB에 쌓이는 것까지 확인했습니다. 하지만, memberId를 이용해서 조회하려고 하니, 맨 처음 memberId가 1인 회원의 처음 저장한 taleId 1번의 데이터와 memberId가 2인 회원의 처음 저장한 동화인 taleId가 4인 동화가 조회가 안됩니다.(나머지 taleId 2, 3, 5번 데이터는 조회가 잘됩니다.) 쿼리문은 다음과 같이 짰고 영속성 문제인 것 같은데, 왜 첫번째 데이터만 조회가 안되는 걸까요?

// 동화 목록조회(페이징)
public List<Tale> findTalesByMemberId(Long memberId, int offset, int limit) {
    return em.createQuery(
                    "select t from Tale t" +
                            " join fetch t.member m" +
                            " join fetch t.image.taleImage ti" +
                            " where m.id = :memberId" +
                            " order by t.createdTime desc", Tale.class
            )
            .setParameter("memberId", memberId)
            .setFirstResult(offset)
            .setMaxResults(limit)
            .getResultList();
}

 

답변 2

0

안녕하세요. 이진님, 공식 서포터즈 y2gcoder입니다.

이진님의 프로젝트 코드를 전부 다 알지는 못해 정확하게 말씀드리기는 어려우니 참고만 해주십쇼!

테이블을 보면 title이 "The Ice-blue ~"로 시작하는 row의 tale_image_id 가 null입니다.

그런데 jpql을 보면 taleImage와 inner join을 해오고 있습니다. inner join 이 아니라 left outer join으로 변경 후 다시 시도해보시겠습니까?

감사합니다.

0

안녕하세요, 인프런 AI 인턴이에요.

동화(Tale) 데이터를 조회하는 메서드를 보면, memberId를 통해 동화 데이터를 조회하는데 일부 데이터가 조회되지 않는다고 하셨는데요. 이러한 문제가 발생하는 원인은 다양할 수 있습니다.

먼저, 데이터베이스에 저장된 memberId 값과 일치하는 데이터가 없을 수 있습니다. memberId 1인 회원의 taleId 1번 데이터와 memberId 2인 회원의 taleId 4번 데이터가 조회되지 않는다고 하셨는데, 데이터가 정확히 존재하는지 확인해보세요. 해당 데이터가 실제로 존재하는지 확인하기 위해 데이터베이스에서 직접 조회해보시는 것이 좋습니다.

또 다른 가능성은 영속성 컨텍스트에 해당 데이터가 이미 로드되어 있어서 조회되지 않는 것일 수 있습니다. 영속성 컨텍스트는 JPA가 관리하는 엔티티의 상태를 추적하고, 필요한 경우 데이터베이스에서 조회하여 엔티티를 제공합니다. 그러나 영속성 컨텍스트에 이미 해당 데이터가 로드되어 있다면, 실제 데이터베이스 조회를 하지 않고 영속성 컨텍스트에 있는 데이터를 반환하기 때문에 변경사항이 반영되지 않을 수 있습니다. 이 경우 영속성 컨텍스트를 초기화하거나, EntityManager를 통해 새로 데이터를 조회하는 방법을 고려해보세요.

이 외에도 다른 요인들로 인해 데이터 조회에 문제가 발생할 수 있습니다. 코드 상에서의 문제, 데이터베이스 설정이나 인덱스 문제, JPA 설정 등을 체크해보세요. 문제가 지속된다면 세부적인 코드나 설정 내용을 확인하시거나, 개발 환경에 대한 정보를 공유해주시면 좀 더 정확한 답변을 드릴 수 있을 것 같아요.

더 자세한 내용을 공유해주시면, 더 도움을 드릴 수 있을 거예요. 좋은 결과가 있기를 바라며, 더 궁금한 점이 있으면 언제든지 물어보세요!

이진님의 프로필 이미지
이진

작성한 질문수

질문하기