diff --git a/README.md b/README.md index 6e5bf49..16057f0 100644 --- a/README.md +++ b/README.md @@ -117,3 +117,11 @@ ERROR: NULL not allowed for column "ID"; SQL statement: - 프록시 객체는 원본 엔티티를 상속받음, 타입 체크시 주의필요 (`instance of`로 확인, `==` 으로 비교하면 안됨) - 영속성 컨텍스트에 엔티티가 이미 있으면 `em.getReference()`를 호출해도 실제 엔티티 반환 - 프록시 `==` 엔티티 항상 `true` + +--- + +### 즉시로딩과 지연로딩 + +- 가급적 지연 로딩만 사용(특히 실무에서) +- 즉시로딩은 `JPQL`에서 N + 1 문제를 일으킨다 +- `@ManyToOne`, `@OneToOne`은 기본이 즉시 로딩 -> `LAZY`로 설정 diff --git a/src/main/java/hellojpa/JpaMain.java b/src/main/java/hellojpa/JpaMain.java index e0075a8..171c045 100644 --- a/src/main/java/hellojpa/JpaMain.java +++ b/src/main/java/hellojpa/JpaMain.java @@ -4,6 +4,7 @@ import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; +import java.util.List; public class JpaMain { @@ -16,17 +17,28 @@ public static void main(String[] args) { tx.begin(); try { + Team team = new Team(); + team.setName("teamA"); + em.persist(team); + + Team team2 = new Team(); + team2.setName("teamB"); + em.persist(team2); + Member member = new Member(); member.setUsername("hello"); - + member.addTeam(team); em.persist(member); + Member member2 = new Member(); + member2.setUsername("hello2"); + member2.addTeam(team2); + em.persist(member2); + em.flush(); em.clear(); - Member findMember = em.find(Member.class, member.getId()); - System.out.println("findMember.getUsername() = " + findMember.getUsername()); - System.out.println("findMember.getId() = " + findMember.getId()); + List members = em.createQuery("select m from Member m join fetch m.team", Member.class).getResultList(); tx.commit(); } catch (Exception e) {