member.getName() 같은 데이터가 필요한 경우 DB 조회하여 실엔티티 객체를 만듬해당 과정을 초기화하고 한다.// 프록시 객체로 MemberProxy 반환 Member member = em.getReference(Member.class, "id1"); member.getName(); // getName() 호출 시 초기화 발생// 프록시 클래스 예시 코드 class MemberProxy extends Member { Member target = null; // 진짜 엔티티 참조 변수 public String getName() { if (target == null) { // 초기화 요청, DB 조회 후 진짜 엔티티 생성하고 참조 보관 this.target = ...; // 초기화 로직 실행 } ..
영속성 컨텍스트컴퓨터 게임에서 우리가 게임 캐릭터를 움직이게 하는 게임의 세계캐릭터는 게임 안에서 움직이고, 살아있을 수 있음.프록시 객체게임에서는 특별한 종류의 아이템상자 모양인데, 상자를 열어보지 않는다면 안에 무엇이 있는지 알 수 없음준영속 상태게임의 상자를 열기 위해서는 게임의 세계 안에 있어야한다.게임의 세계와 연결이 끊어진 준영속 상태 에서는 상자를 열 수 없다.게임 캐릭터가 잠시 게임의 세계에서 나와 있는 상태준영속 상태의 상자(프록시 객체) 를 열려고 할때게임은 상자를 열 수 없다 고 오류를 보여줄 것이다.하이버네이트의 LazyInitializationException 과 같음 Uploaded by N2T
@Entity public class Member { // ... // 지연 로딩 설정: Member 조회 시 Team은 프록시 객체로 설정 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; // ... }Member 엔티티 내에서의 Team 과의 관계가 지연 로딩으로 설정되어있음.Member 조회시에 Team 은 프록시 객체로 채워짐.// 지연 로딩을 사용하는 실행 코드 예시 public class SomeService { public void loadMember(EntityManager em) { // 회원만 조회하고, 팀은 프록시 객체로 채워짐 Member member = em.find(Member...
@Entity public class Member { // ... // 지연 로딩 설정: Member 조회 시 Team은 프록시 객체로 설정 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; // ... }Member 엔티티 내에서의 Team 과의 관계가 지연 로딩으로 설정되어있음.Member 조회시에 Team 은 프록시 객체로 채워짐.// 지연 로딩을 사용하는 실행 코드 예시 public class SomeService { public void loadMember(EntityManager em) { // 회원만 조회하고, 팀은 프록시 객체로 채워짐 Member member = em.find(Member...
연관관계의 복잡성데이터 로딩 시 성능을 고려하여 일대다(@OnetoMany) 과 다대다(@ManyToMany) 연관관계지연 로딩일대일(@OneToOne) , 다대일(@ManyToOne)즉시 로딩을 기본 페치 전략으로 설정 일대다 다대다의 경우컬렉션의 데이터의 양이 많을 가능성이 높고이를 한 번에 로딩하는 것은 성능에 부정적인 영향다대일 일대일의 경우해당 엔티티가 로딩될 때 연관된 엔티티로 함께 로딩연관된 데이터의 양이 많지 않을 것으로 예상실무에서는 왠만하면 지연로딩으로 설정해놓고,어플이 거의 완성 단계에 접어들었을때 프로파일링, 성능 테스트를 통해 필요한 부분만 즉시 로딩을 적용한다. Uploaded by N2T
JPA 조인 전략package com.example.springboot3.test; import jakarta.persistence.*; import lombok.Getter; @Entity @Getter @Inheritance(strategy = InheritanceType.JOINED) // 상속 매핑은 부모 클래스에 선언 @DiscriminatorColumn(name = "DTYPE") // 부모 클래스에 구분 컬럼을 지정 public class Item { @Id @GeneratedValue @Column(name = "ITEM_ID") private Long id; private String name; private int price; } @Entity @DiscriminatorValue("A"..