Spring/ORM8 8. 프록시와 연관관계 관리 1. 프록시 1) 프록시 기초 - em.find() vs em.getReference() - em.find() - 데이터베이스를 통해서, 실제 엔티티 객체 조회 - em.getReference() - 데이터베이스 조회를 미루는, 가짜(프록시) 엔티티 객체 조회 2) 프록시 특징 - 실제 클래스를 상속 받아서 만들어짐 → 타입 체크시 주의해야 한다. (== 비교보다는, instance of 사용) - 프록시 객체는 실제 객체의 참조(target)를 보관 - 프록시 객체를 호출하면, 프록시 객체는 실제 객체의 메소드 호출 (프록시 객체에 위임, delegate) - 프록시 객체는 처음 사용할 때, 1번만 초기화 - 프록시 객체를 초기화 할 때, 프록시 객체가 실제 엔티티로 바뀌는 것은 아님. → 프록시 객체.. 2023. 9. 4. 7. 고급 매핑 1. 상속관계 매핑 - 관계형 데이터베이스는 상속 관계 X - 슈퍼타입∙서브타입 관계라는 모델링 기법이 객체 상속과 유사 → 객체의 상속관계를, DB의 슈퍼타입 서브타입 관계와 매핑 *슈퍼타입 서브타입 논리 모델을, 실제 물리 모델로 구현하는 방법 관련 어노테이션 @Inheritance(strategy=InheritanceType.---) → 상속관계를 매핑할 때 어떤 전략을 사용할 것인지를 설정하는데 사용한다. →DiscriminatorColumn(name="DTYPE") → 엔티티의 하위 클래스를 구분하는 Column을 지정할 때 사용한다. → 'name' 속성은 데이터베이스 테이블에 추가될 구분 열의 이름을 정의한다. * 실무 운영 상에서 항상 설정하는 것이 좋음. @DiscriminatorValu.. 2023. 9. 3. 6. 다양한 연관관계 매핑 1. 연관관계 매핑시 고려사항 3가지 1) 다중성 - 다대일 : @ManyToOne - 일대다 : @OneToMany - 일대일 : @OneToOne - 다대다 : @ManyToMany 2) 단방향, 양방향 - 테이블 - 외래키 하나로 양쪽 join 가능 - 방향이라는 개념이 없음 - 객체 - 참조용 필드가 있는 쪽으로 참조 가능 - 한쪽만 참조하면 단방향 - 양쪽이 서로 참조하면 양방향 3) 연관관계의 주인 - 테이블은 외래키 하나로, 두 테이블이 연관관계를 맺음 - 객체 양방향 관계는 A→B, B→A 처럼 참조가 2군데 둘 중 테이블의 외래키를 관리할 곳을 지정해야 함. - 연관관계의 주인 : 외래키를 관리하는 참조 - 연관관계의 손님(?) : 외래키에 영향을 주지 않음, 단순 조회만 가능 2. 다대.. 2023. 9. 3. 5. 연관관계 매핑 기초 *연관관계가 필요한 이유 테이블은 외래 키로 join을 사용해서 연관된 테이블을 찾는다. 객체는 참조를 사용해서 연관된 객체를 찾는다. → 이러한 차이를 해소하기 위해, "각 entity 간의 연관관계 매핑"을 통해 해결해야 한다. 1. 단방향 연관관계 2. 양방향 연관관계, 그리고 연관관계의 주인 손님(?) Entity에서, 주인 객체의 조회가 필요할 경우 / 양방향 연관관계를 설정한다. 주인 Entity에서만 수정 및 삭제를 할 수 있으며, 다른 손님 Entity에서는 조회만 할 수 있다. → 실제로는 서로 다른 단방향 관계 2개이다. - mappedBy - 객체의 두 관계중 하나를 연관관계의 주인으로 지정 - 연관관계의 주인만이 외래키(FK)를 관리 (등록, 수정) - 주인이 아닌쪽은 읽기만 가능 .. 2023. 9. 2. 4. 엔티티 매핑 1. 객체와 테이블 매핑 @Entity - 데이터베이스 테이블과 매핑되는 객체 - 주의 - 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) - final class, enum, interface, inner class, record 사용 X - 저장할 필드에 final 사용 X → 수정 불가 - 속성 : name - JPA에서 사용할 엔티티 이름을 지정 - 기본값 : 클래스 이름을 그대로 사용(ex. Member) - 같은 클래스 이름이 없으면, 가급적 기본값을 사용한다. @Table - 엔티티와 매핑할 테이블 지정 - 속성 2. 데이터베이스 스키마 자동 생성 - DDL을 애플리케이션 실행 시점에 '자동 생성' - 테이블 중심 → 객체 중심 - 데이터베이스 방언을 활용해서,.. 2023. 9. 2. 3. 영속성 관리 - 내부 동작 방식 JPA에서 가장 중요한 2가지 - 객체와 관계형 데이터베이스 매핑하기 (ORM) - 영속성 컨텍스트 1. 영속성 컨텍스트 - JPA에서 관리되는 Entity 객체의 논리적인 저장소 - Entity 객체의 생명 주기를 관리하고, DB와의 상호작용을 최적화하는 역할을 한다. https://chat.openai.com/share/d91d8f7c-5495-4c01-adf6-313078551d53 1) 영속성 컨텍스트의 장점 (1) 1차 캐시 (2) 동일성 보장 (Identity) (3) 트랜잭션을 지원하는 쓰기 지연 (Transactional write-behind) (4) 업데이트 변경 감지 (Dirty Checking) (5) 지연 로딩 (Lazy Loading) 2) 영속성 컨텍스트를 플러시하는 방법 (1.. 2023. 8. 29. 이전 1 2 다음