조인

SQL 조인과 실행되는 것은 똑같습니다.

차이는 엔티티를 중심으로 동작을 한다는 것입니다. 조금 객체 스타일로 조인 문법이 나갑니다.

코드

내부 조인

public class JpaMain_4 {

    public static void main(String[] args) {
        EntityManagerFactory enf = Persistence.createEntityManagerFactory("hello");

        EntityManager em = enf.createEntityManager();

        EntityTransaction tx = em.getTransaction();
        tx.begin();

        try {

            Team team = new Team();
            team.setName("teamA");
            em.persist(team);

            Member member = new Member();
            member.setUsername("member1");
            member.setAge(10);
            member.changeTeam(team); //연관관계 편의메서드
            em.persist(member);

            em.flush();
            em.clear();

            **String query = "select m from Member m inner join m.team t";
            List<Member> result = em.createQuery(query, Member.class)
                    .getResultList();**

            tx.commit();
        } catch (Exception e) {
            tx.rollback();
        } finally {
            em.close();
        }
        enf.close();

    }
}

Untitled

inner join 쿼리가 나가는 것을 볼 수 있습니다.

<aside> ❗ 그런데 select 쿼리가 또 나갑니다??


Untitled

지연 로딩에서 설명했지만 @ManyToOne(일대다)를 사용할 때는 항상 fetch를 LAZY로 해야합니다.

쿼리가 또 나가는 이유 자세히

</aside>

그래서 이제 조인이 되는 것을 알았으니 응용을 할 수 있습니다.