QueryDSL join할 때 null이 무시됨?

0

Kotlin

목록 보기
21/32

목표

  • habitCategory : habit = 1 : N
  • habit id를 habitAnswer의 habit_id 로 가지고 있음 (연관관계 X)
    -> habitCategory를 불러올 때, habit의 목록을 가져오고 habit의 목록 중 로그인한 사용자의 habitAnswer에 있는 habit_id가 habit에 존재한다면 같이 엮어서 habitAnswer id를 가져오기

  • 기존에 위에 있는 코드로, 연관관계가 없는 habit과 habitAnswer을 join 하기위해서 on 으로 habit.id.eq(habitAnswer.habitId)로 엮었고, 로그인한 사용자의 답변(habitAnswer)만 필요하기 때문에 where 절에 habitAnswer.userId.eq(userId)를 넣어줬다.
    모든 habit을 가져온 후에, habitAnswer가 있는 애들만 habitAnswerId를 가져와야하는데
    habitAnswer이 있는 habit만 가져오는 것....?
  • join on 할 때 null인 값을 가져오지 않는 문제가 있나? 해서 theta join, left outer join 등 다른 join 방법이 없나 찾아보고 다 해봤는데 답이 안나옴.
    그러다가 https://giron.tistory.com/66

여기서 힌트를 얻음.
where 절 다 빼고 실행해봤더니 habit을 다 불러오더라..

그래서 on 할 때 로그인한 사용자의 정보만 가져오도록 하고, where 절에는 전체적으로 조건을 넣어야 하는걸 넣음.

  • 해결하고나니까 되게 당연해보이는데, 당연히 join & on이 문제일줄 알았는데 생각도 못한 where 절에서 문제가 있었을 줄이야.. 하나 배워간다.
profile
백엔드를 공부하고 있습니다.

0개의 댓글