https://github.com/codingspecialist/Springboot-ORM-Lazy-Eager

em.find()를 사용하지 않고 직접 게시글 상세보기를 완성하세요. 모든 연관관계의 전략을 Lazy로 변경한 뒤 진행하세요.

Untitled

1. 아래와 같이 두개의 메서드를 만듭니다.

2. 두개의 메서드를 BoardRepository에 구현합니다.

<aside> 💡 findByIdJPQL은 JPQL 문법으로 쿼리를 작성합니다.

findByIdNativeQuery는 NativeQuery로 쿼리를 작성합니다.

</aside>

public Board findByIdJPQL(int id){
    return em.createQuery("", getEntityClass()).getSingleResult();
}

public List<BoardDetailDto> findByIdNativeQuery(int id){
    return (BoardDetailDto) em.createNativeQuery("", BoardDetailDto.class).getResultList();
}

3. BoardRepositoryLevel4Test 를 생성하여 테스트합니다.

3.1 JPQL

잘못된 예시

select
        board0_.id as id1_0_0_,
        board0_.content as content2_0_0_,
        board0_.created_at as created_3_0_0_,
        board0_.title as title4_0_0_,
        board0_.user_id as user_id5_0_0_ 
    from
        board_tb board0_ 
    where
        board0_.id=?

잘된 예시

Hibernate: 
    select
        board0_.id as id1_0_0_,
        user1_.id as id1_2_1_,
        replylist2_.id as id1_1_2_,
        board0_.content as content2_0_0_,
        board0_.created_at as created_3_0_0_,
        board0_.title as title4_0_0_,
        board0_.user_id as user_id5_0_0_,
        user1_.created_at as created_2_2_1_,
        user1_.email as email3_2_1_,
        user1_.password as password4_2_1_,
        user1_.username as username5_2_1_,
        replylist2_.board_id as board_id4_1_2_,
        replylist2_.comment as comment2_1_2_,
        replylist2_.created_at as created_3_1_2_,
        replylist2_.user_id as user_id5_1_2_,
        replylist2_.board_id as board_id4_1_0__,
        replylist2_.id as id1_1_0__ 
    from
        board_tb board0_ 
    inner join
        user_tb user1_ 
            on board0_.user_id=user1_.id 
    left outer join
        reply_tb replylist2_ 
            on board0_.id=replylist2_.board_id 
    where
        board0_.id=?
Hibernate: 
    select
        user0_.id as id1_2_0_,
        user0_.created_at as created_2_2_0_,
        user0_.email as email3_2_0_,
        user0_.password as password4_2_0_,
        user0_.username as username5_2_0_ 
    from
        user_tb user0_ 
    where
        user0_.id in (
            ?, ?
        )