쿼리
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();
}
이렇게 하면
이런식으로 나오는데

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를 써줘야 다 가지고 온다. 둘이 무조건 같이 써야한다.

<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";
}
화면에 뿌릴때는 보더안에 유저안에 유저네임이 있으니 이렇게 써줘야 한다.
