• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

자식객체 조건을 걸어 부모객체를 가지고 왔을때 부모객체 밑에 자식객체 데이터가 그대로입니다.

22.12.09 18:56 작성 조회수 292

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

안녕하세요 궁금한게 있어 글을 남깁니다.

예를 들어서 유저가 있고 유저가 쓰는 게시글이 있습니다.

유저 1 : 게시글 N // 유저 1 : 차단 N

게시글 1 : 채팅 N // 유저 1 : 채팅 N

이 상황에서 질문 글 조회 할 경우 글 객체에 채팅 리스트들을 가져다가 쓰고 있습니다.

이제 질문입니다.

저 질문글에 제목 질문 그리고 채팅방이 몇개있는지를 표현 하고 싶은데

차단한 유저의 채팅방은 카운트를 안했으면 합니다.

유저 인덱스로 내가 차단한 유저 리스트를 가지고 온뒤

게시글을 조회할때

select *

from Qa q join Room r on q.idx = r.q.idx

where r.댓글작성자Idx not in (차단자 리스트)

해서 게시글을 조회 하였을경우

 

게시글을 가지고 온뒤 객체 안을 보면

여전히 차단자 리스트에 포함되어있는 채팅방까지 나옵니다.

이럴 경우 자식리스트 (oneToMany) 객체의 조건을 걸고 싶을땐 어떻게 해야하나요 ?

 

질문을 최대한 정리 하려했는데도 가독성이 좋지 못하네요 .

제 질문이 이해 안되시는 부분이 있다면 얘기 부탁드리겠습니다.

 

 

 

 

 

답변 1

답변을 작성해보세요.

1

안녕하세요. 김준엽님

단순 조인을 사용했기 때문에 이렇게 동작하는 것이 맞습니다.

참고: https://www.inflearn.com/questions/33719

3가지 방법이 있습니다.

1: 엔티티 대신에 DTO로 조회합니다.

2: ROOM을 기준으로 조회합니다.

3: 엔티티로 조회하고 싶으면 연관관계 있는 상태로 필터링 하려면 fetch join을 사용해야 합니다.

추가로 주의할 사용도 있으니 다음을 확인해주세요.

https://www.inflearn.com/questions/15876

감사합니다.

김준엽님의 프로필

김준엽

질문자

2022.12.11

안녕하세요 답변 감사합니다. 



public List<Qa> qaList(Member member, String choose,List<Member> blockMembers) {
    return select(qa)
            .from(qa)
            .innerJoin(qa.chatRoomList, chatRoom)
            .fetchJoin()
            .where(qa.member.eq(member),
                    isSelectMember(choose),
                    chatRoom.aMember.notIn(blockMembers)
            )
            .fetch();
}
```

image

3번 엔티티로 조회 할경우 패치 조인으로 자식 컬렉션 리스트는 제외 되었으나

저는 qa 객체 안에 차단멤버가 채팅방을 제외한 객체를 뽑고 싶은데

조인을 할경우는 qa가 채팅방 수만큼 객체가 생깁니다.

qa 객체 하나만 나오면서 자식 객체 리스트에 조건을걸어 안나오게 하는방법은

없는걸까요 ?

 

 

 

안녕하세요. 김준엽님

JPA 기본편에서 설명하는 distinct를 다시한번 복습해주세요.

감사합니다.