본문 바로가기

분류 전체보기57

즉시로딩 과 지연로딩 지연로딩 ( FetchType.LAZY) Member 에 Team 을 매핑했을 경우, 지연로딩을 사용하게 되면 최초 조회시 프록시 객체로 호출하게 된다. 그리고 실제 그 프록시 객체의 메소드를 사용하는 시점에 DB로 부터 초기화를 진행한다. 이로인해 쿼리가 단순해지고 네트워크상의 이점이 있다. [ Member를 단독적으로 사용하려고 할 때, Team 쿼리가 따로 나가지 않음 ] @OneToMany, @ManyToMany // Default = LAZY EX ] Member 를 로딩할 때, Member에 걸려있는 Team은 지연로딩. 즉 Proxy 엔티티로 호출되면 나중에 직접적인 접근이 필요할 때 DB에 초기화를 요청하여 진짜 엔티티를 가져온다. 즉시로딩 ( FetchType.EAGER) Member 에.. 2021. 9. 10.
프록시(Proxy) 프록시 조회 엔티티의 조회 // em.find(XXX.class, "id"); 프록시 조회 // em.getReference(XXX.class, "id"); 프록시 객체의 초기화 getReference 를 통해 특정 객체의 프록시를 호출한다. 프록시 객체의 참조(Target Id) 가 비어있기 때문에 영속성 컨텍스트에 초기화 요청을 한다. 실제 DB 에서 특정 객체 DB를 조회하여 실제 엔티티를 생성한다. 프록시 객체의 참조(Target Id) 와 실제 엔티티를 연결한다. # 프록시 강제 초기화 : org.hibernate.Hibernate.initialize(entity); 이 때, 프록시 객체의 메소드를 호출하면 참조에 연결된 특정 객체의 메소드를 반환한다. 프록시의 특징 프록시 객체는 실제 객체의 .. 2021. 9. 9.
상속관계의 매핑 RDB 의 상속관계 관계형 DB는 상속관계 개념이 없으며 대신 슈퍼타입과 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. RDB 의 상속관계를 물리 모델로 구현하는 방법 @Inheritance(strategy=InheritanceType.XXX) 각각 테이블로 변환 -> 조인 전략 [JOINED] 슈퍼타입의 속성을 서브타입들이 상속받고 각자의 속성을 가지고 있는다. # 장점 - 테이블 정규화 - 외래키 참조 무결성 제약조건 활용가능 : 슈퍼타입의 PK를 통해서 모두 조회 가능하다. - 저장 공간이 효율적이다 // 정규화 덕분 # 단점 - 조회시 많은 조인을 사용하여 쿼리가 복잡 통합 테이블로 변환 -> 단일 테이블 전략 [SINGLE_TABLE] # 장점 - 통합 테이블을 사용해서 조인이 필요없고.. 2021. 9. 8.
다양한 연관관계 매핑 1. [ 1 : N 매핑 ] @OneToMany, @ManyToOne 일대다 단방향 매핑에서는 1이 연관관계의 주인으로써 외래 키(FK)를 관리하는 특이한 구조이다. 1의 테이블에서 @JoinColumn을 사용하여 외래키를 등록하여야 한다. * 일대다 단방향 매핑보다는 다대일 양방향 매핑을 사용하자! 2. [ 1 : 1 매핑 ] @OneToOne 일대일 매핑에서는 주 테이블이나 대상 테이블 중에 외래 키(FK)를 선택할 수 있다. 외래 키에 데이터베이스 유니크 제약조건이 추가되어야 한다. A라는 객체는 A의 엔티티에 있는 외래 키(FK)만 관리할 수 있다. 3. [ N : M 매핑 ] @ManyToMany 객체상으로는 가능하지만 테이블상으로는 불가능한 구조. 따라서 연결용 중간 테이블을 추가하여 엔티티로.. 2021. 9. 5.