먼저 위의 문장을 보면 boardJPQLQuery.leftJoin(reply).on(reply.board.eq(board));를 보면 on절을 명시해줘도 문제가 없었다.
하지만 밑에 문장 boardJPQLQuery.leftJoin(board.member, member);에서 원래는 on절을 사용해서 board와 member를 연결해줬는데 이렇게 하면 오류가 났다.
이유는 board.member, member로 엔티티 관계가 이미 정의되어 있어 있어서 암시적으로 조인 조건을 처리할 수 있기 때문에 on 절이 필요하지 않습니다.
반면 위에 boardJPQLQuery.leftJoin(reply)처럼 엔티티 관계가 정의가 되어있지 않는 경우에는 on절을 명시적으로 사용해줘야한다.
JPA를 사용할때 내부적으로 어떻게 돌아가는지 확인하기 쉽지않아서 관계를 설정하는 데 있어서 사용하기 어려웠지만 유동적으로 변화에 빠르게 대응할 수 있다는 큰 장점이 있기 때문에 유용하다는 생각이 들었다. 어떤 것도 장점만 있지않고 어떤 것도 단점만 있지 않다고 생각합니다. 자신의 상황에 맞게 유동적으로 필요한 기술을 사용하는 것이 중요한 것 같습니다.