Skip to content

Commit

Permalink
feat(add): 즉시로딩과 지연로딩
Browse files Browse the repository at this point in the history
  • Loading branch information
discphy committed Feb 18, 2024
1 parent 51edede commit b927c32
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 4 deletions.
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,3 +117,11 @@ ERROR: NULL not allowed for column "ID"; SQL statement:
- 프록시 객체는 원본 엔티티를 상속받음, 타입 체크시 주의필요 (`instance of`로 확인, `==` 으로 비교하면 안됨)
- 영속성 컨텍스트에 엔티티가 이미 있으면 `em.getReference()`를 호출해도 실제 엔티티 반환
- 프록시 `==` 엔티티 항상 `true`

---

### 즉시로딩과 지연로딩

- 가급적 지연 로딩만 사용(특히 실무에서)
- 즉시로딩은 `JPQL`에서 N + 1 문제를 일으킨다
- `@ManyToOne`, `@OneToOne`은 기본이 즉시 로딩 -> `LAZY`로 설정
20 changes: 16 additions & 4 deletions src/main/java/hellojpa/JpaMain.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import java.util.List;

public class JpaMain {

Expand All @@ -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<Member> members = em.createQuery("select m from Member m join fetch m.team", Member.class).getResultList();

tx.commit();
} catch (Exception e) {
Expand Down

0 comments on commit b927c32

Please sign in to comment.