쿼리

public Board findByIdJoinUser(int id) {
    Query query = em.createQuery("select b from Board b join b.user u where b.id = :id", Board.class);
    query.setParameter("id",id);
    return (Board) query.getSingleResult();
}

이렇게 하면

이런식으로 나오는데

Untitled

user가 없으니 문제가 된다.

따라서 쿼리를

public Board findByIdJoinUser(int id) {
    Query query = em.createQuery("select b from Board b join fetch b.user u where b.id = :id", Board.class);
    query.setParameter("id",id);
    return (Board) query.getSingleResult();
}

join뒤에 fetch를 써줘야 다 가지고 온다. 둘이 무조건 같이 써야한다.

Untitled

<aside> 💡 join할때는 fetch해서 select 절을 프로젝션 해줘야 한다.

</aside>

컨트롤러

private final BoardRepository boardRepository;

@GetMapping("/board/{id}")
public String detail(@PathVariable Integer id, HttpServletRequest request) {
    Board board = boardRepository.findByIdJoinUser(id);
    request.setAttribute("board", board);

    return "board/detail";
}

화면에 뿌릴때는 보더안에 유저안에 유저네임이 있으니 이렇게 써줘야 한다.

Untitled