JPA16 [Java] JPA 강의 - 8 (프록시와 연관관계 관리) 프록시 프록시 기초 - em.find() : 데이터베이스를 통해서 실제 엔티티 객체를 조회하는 것 - em.getReference() : 가짜(프록시) 엔티티 객체를 조회하는 것 -> 실제 사용되는 시점에 쿼리가 실행됨 프록시 특징 - 프록시 객체는 처음 사용할 때 한 번만 초기화 --> 프록시 객체를 통해 실제 entity에 접근 - 영속성 컨텍스트에 엔티티가 있으면 getReference 호출해도 실제 엔티티 반환 --> 하나의 영속성 컨텍스트에 있고 PK가 동일하면 JPA는 객체 비교시 TRUE를 반환함 - type 체크시 -> == 비교가 아닌 instance of 사용하기 - 준영속 상태일 때, 프록시를 초기화하면 에러 발생함 (initializeException) 즉시 로딩과 지연 로딩 "지연.. 2024. 2. 15. [Java] JPA 강의 - 7 (고급 매핑) 상속관계 매핑 조인 전략 @DiscriminatorColumn(name = "DTYPE") -> 엔티티명이 들어감 @DiscriminatorValue("XXX") 두번의 INSERT 장점 - 테이블 정규화 - 외래키 참조 무결성 제약조건 활용 가능 - 저장공간 효율화 단점 - 조회 시 조인을 많이 사용, 성능 저하 - 조회 쿼리가 복잡함 - 데이터 저장시 INSERT SQL 2번 호출 단일 테이블 전략 @DiscriminatorColumn 쓰지 않아도 DTYPE이 생성됨 하나의 테이블에 다 넣고 DTYPE으로 구분함 장점 - 조인이 필요 없으므로 일반적으로 조회 성능이 빠름 - 조회 쿼리가 단순함 단점 - 자식 엔티티가 매핑한 컬럼은 모두 null 허용 -> 데이터 무결성 애매함 - 단일 테이블에 모든 .. 2024. 2. 5. [Java] JPA 강의 - 5 (연관관계 매핑 기초) 단반향 연관관계 @ManyToOne - 다대일 매핑 - FK가 있는 쪽이 항상 N ('다'가 됨) @JoinColumn(name = "XXX_ID") - 외래키로 사용할 컬럼과 그 컬럼의 이름 지정 양방향 연관관계와 연관관계의 주인 양방향 매핑 - 외래키가 있으면 서로의 연관을 알 수 있음 - mappedBy 어떤 것과 mapping 되어 있는가? 객체와 테이블이 관계를 맺는 차이 객체와 연관관계 = 2개 - 단방향 연관관계가 2개 있는 것임 테이블 연관관계 = 1개 - FK 하나로 연관관계가 끝이 남 둘의 차이점을 이해해야 함 객체의 양방향 관계 객체의 양방향 관계는 사실 양방향 관계가 아닌 서로 다른 단방향 관계 2개임 객체를 양방향으로 참조하려면 단방향 연관관계를 2개 만들어야 함 테이블의 양방향 .. 2024. 1. 18. [Java] JPA 강의 - 4 (엔티티 매핑) 객체와 테이블 매핑 @Entity - JPA가 관리하는 엔티티 - 기본 생성자 필수 - 저장할 필드에 final 사용하면 안됨 - 속성 : name -> JPA에서 사용할 엔티티 이름을 지정 @Table 속성 - name : 매핑할 테이블 이름 - catalog : 데이터베이스 catalog 매핑 - schema : 데이터베이스 스키마 매핑 - uniqueConstraints : DDL 생성 시 유니크 제약 조건 생성 데이터베이스 스키마 자동 생성 - DDL을 애플리케이션 실행 시점에 자동 생성 (ex. Insert into) - 생성된 DDL은 개발 장비에서만 사용 (운영서버에서 사용X) 속성 - create : DROP + CREATE 기존 테이블 삭제 후 다시 생성 - create-drop : 종료.. 2024. 1. 17. 이전 1 2 3 4 다음