tonykang22 / study

0 stars 0 forks source link

[JPA] 8장. 프록시와 연관관계 관리 #138

Open callmeaxxe opened 1 year ago

callmeaxxe commented 1 year ago

Proxy Pattern

image

    // RealSubject, Proxy가 공유하는 인터페이스 
    public interface Subject{
        void request(); 
    } 

    // RealSubject 자기가 할 일만 함. SRP
    public class RealSubject implements Subject{
        public void request(){
    //
        }
    }

    // RealSubject를 호출하기 전후로 추가작업 
    public class Proxy implemnts Subject{
        private RealSubject realSubject // inject;
        public void request(){
            // do something
            realSubject.request();
            // do something
        }
    }

지연로딩 (lazy loading)

image

    Member member = em.find(Member.class, "member1"); // entity instance 
    Member member = em.getReference(Member.class, "member1"); // proxy instance
    public class MemberProxy extends Member{
        Member target = null;
        public String getName(){
            // 2. 초기화요청
            // 3. DB 조회
            // 4. 없으면 entity 생성 및 보관 -> proxy에서 실제 엔티티를 참조해서 값을 가져올 수 있다.

        }

    }
    Team team = em.getReference(Team.class, "team1") // team1이 식별자 
    team.getId(); // getId()는 식별자를 반환하면 됨. 프록시객체 초기화 안됨

즉시로딩/지연로딩 비교

컬렉션 래퍼

JPA 기본 fetch 전략

디폴트 설정값

모든 연관관계에 lazy를 사용하고. 어플리케이션 개발이 완료됐을때 eager로 바꿔보고 최적화.

영속성전이 (transitive persistence)

Cascade 종류

앞장에서 소개된 persistent context 내 엔티티의 상태와 관련지어서 보면 된다. 부모 엔티티가 해당상태로 되었을때 자식 엔티티도 따라서 감.

image

orphanRemoval

DDD의 aggregate root