본문 바로가기

JPA/JPA 기초4

[JPA] 프록시 객체와 지연로딩 정리 HTML 삽입 미리보기할 수 없는 소스 1. 프록시 객체란 프록시 객체는 실제 Entity를 대신하는 가짜 객체이다. 사용법을 보면은 무슨 뜻인지 이해가 갈 것이다. 먼저 java에서 프록시 객체를 생성하는 방법은 이렇다. entityManager.getReference(타겟엔티티.class, 엔티티의PK) getReference함수의 리턴값을 확인해 보면 'the found entity instance'라고 적혀있다. 즉 엔티티 객체를 돌려준단 것이다. 그러면 getReference 함수를 통해서도 Entity 객체가 조회되고 find() 함수를 통해서도 Entity가 조회되는데 무슨 차이가 있는걸까? 그 차이는 getClass()를 직접 로깅을 해보는 순간 다르단 걸 알 수 있다. EntityMana.. 2023. 8. 27.
JPA 정리(3) - 연관관계, 양방향 매핑 Entity의 연관 관계 DB 테이블의 연관 관계와 비슷하지만 Entity의 연관 관계와 동일하지 않다. 여러가지 연관 관계 연관 관계를 가지고 있을 때 select 외의 insert등도 한번에 처리가 가능하다. 가장 빈번하게 쓰이고 일반적인 형태, fk를 가지고 있는 Member테이블의 객체가 Team의 참조를 가지고 있다 실무에서 거의 사용되지 않는 형태지만 지원되긴 한다. 테이블에서는 무조건 다쪽에 fk가 들어간다. 로직에서 조회의 빈도성 때문에 일대다를 사용해야 한다면 차라리 다대일 양방향 매핑을 사용 이런 매핑은 공식적으로 존재하지 않는다. @JoinColumn(insertable=false, updatable=false) 사용 읽기 전용 필드를 사용해서 양방향처럼 사용하는 방법 다대일 양방향을.. 2023. 7. 17.
JPA 정리(2) - 스키마 생성 및 제약 조건 1.Entity와 테이블 매핑 @Entity 가 붙은 클래스는 JPA가 관리 → 엔티티 주의 사항 기본 생성자 필수! final 클래스 사용 금지 필드에도 final 사용 금지 setter 가능한 사용 금지 2.데이터베이스 스키마 자동 생성 DDL을 어플리케이션 실행 시점에 자동 생성 이렇게 생성된 DDL은 개발 서버에서만 사용 생성된 DDL은 운영서버에서는 사용하지 않거나, 다듬은 후 사용 데이터베이스 스키마 자동 생성에 관한 속성 create : 기존 테이블 삭제 후 다시 생성 create-drop : create와 같으나 종료시점에 테이블 drop update: : 변경분만 반영(추가만 됨) validate : 엔티티와 테이블이 정상 매핑되었는지만 확인 → 맞지 않다면 에러 발생 none : 사용하.. 2023. 7. 17.
JPA 정리(1) - 영속성 컨텍스트 영속성 컨텍스트 DB의 데이터들을 관리해주는 객체로 관리 해주는 주체 단순하게 영속성 컨텍스트 == 1차캐시라고 생각 persist(entity)를 사용하여 영속성 컨텍스트에 저장 JPA를 통해 조회한 Entity들은 자동으로 영속성 컨텍스트에 등록된다. => 이미 DB에 있는 것들을 조회 한 것이기 때문에 commit을 해도 DB에 새로 등록되지 않는다. 영속성 컨텍스트에 있는 Entity의 setter를 통해 값을 변경한 뒤 commit을 하면 DB에 동일한 ID(pk)를 가진 로우와 비교하여 달라진 부분에 대해 update를 실행,그렇기에 Entity의 setter메소드를 자제해야 한다. -> Dirty Checking !중요 : persist() 함수가 DB에 저장하는 것이 아니라 단순 영속성 컨.. 2023. 7. 17.