ORM/JPA

· ORM/JPA
[JPA] 엔티티의 생명주기와 Spring Data JPA- (1) 0. 들어가기 전에 [10분 테코톡] 잉, 페퍼의Spring Data JPA 삽질일지 을 보다가 흥미로운 점이 생겨서 JPA의 영속성 관리 및 기본 메서드에 대해서 알아보려고 한다. 1. 영속성 컨텍스트(PersistenceContext) 엔티티를 영구 저장하는 환경으로 논리적 개념 엔티티 매니저(EntityManger)를 통해 영속성 컨텍스트에 접근 장점 1차 캐시 한 트랜잭션 내에서 공유 JPA가 객체를 찾을 때 1차 캐시를 먼저 찾은 후에 없으면 DB에서 확인 DB에서 조회를 하고 1차 캐시에 저장 후 반환 동일성 보장 트랜잭션을 지원하는 쓰기 지연 변경 감지(Dirty Checking) commit이 발생하면 1차 캐시와 스냅샷을..
· ORM/JPA
[JPA] 영속성 전이와 고아 객체 1. 영속성 전이 특정 엔티티를 영속 상태로 만들 때, 연관된 엔티티(보통 자식 엔티티)도 함께 영속 상태로 만드는 것 왜 사용할까? JPA에서 엔티티의 값을 변경할 때 엔티티가 영속상태가 되어야 한다. 따라서 부모 객체를 영속 상태로 만들때 그와 관련된 자식 객체를 영속상태로 바꾸어 간편하게 처리할 수 있도록 돕는다. 하나의 부모가 자식들을 관리할 때 쓴다. 만약 자식이 두 개 이상의 연관관계가 있으면 사용하면 안됨 1.1 사용법 @OneToMany(mappedby = "parent", cascade = CascadeType.PERSIST) private List child = new ArrayList(); @XXXtoXXX에 추가로 cascade 옵션을 붙혀주면 된..
· ORM/JPA
이 학습 자료는 김영한님의 인프런 강의를 참고해서 만들었습니다. 1. 객체지향 쿼리 언어 1.1 JPQL JPA에서 SQL을 추상화한 객체 지향 쿼리 언어 SQL과 문법과 유사 테이블이 아닌 엔티티 객체를 대상으로 쿼리 검색 조건이 포함된 SQL을 사용해서 필요한 데이터만 DB에서 가져올 수 있음 1.2 Criteria 자바 코드로 JPQL 작성 가능 JPA 공식 기능 너무 복잡하고 실용성이 없다. 1.3 QueryDSL 오픈소스 자바 코드로 JPQL 작성 가능 → 컴파일 시점에 문법 오류 발견 동적 쿼리 작성 편리 단순하고 쉬움 실무 사용 권장 1.4 네이티브 SQL JPA가 제공하는 SQL을 직접 사용하는 기능 2. JPQL(Java Persistence Query Language) - 기본문법 객체..
· ORM/JPA
이 학습 자료는 김영한님의 인프런 강의를 참고해서 만들었습니다. 1. 기본값 타입 1.1 JPA 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적이 가능 값 타입 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 추적 불가 1.2 값 타입 분류 기본값 타입 자바 기본 타입(int, double) 래퍼 클래스(Integer, Long) String 임베디드 타입(복합 값 타입) 컬렉션 값 타입 1.3 기본값 타입 생명주기가 엔티티에 의존됨 공유X 자바 기본 타입(primitive type)은 절대 공유X → 값을 복사하여 사용 래퍼 클래스나 String 같은 클래스는 공유는 가능하지만 변경X 2. 임베디드 타입 내장 타입으로도 불..
· ORM/JPA
이 학습 자료는 김영한님의 인프런 강의를 참고해서 만들었습니다. 1. 프록시 가짜 엔티티로써 실제 클래스를 상속 받아서 만들어 진다. → 겉 모양이 같음(== 대신에 instanceof 사용) em.find() vs em.getReference() em.find() : 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 1.1 프록시 특징 프록시 객체는 실제 객체의 참조(target)를 보관 호출시 실제 객체의 메소드 호출 처음 사용할 때 한번만 초기화 → target을 통해서 실제 엔티티에 접근이 가능, 실제 엔티티가 되는것X 영속성 컨텍스트에 찾는 엔티티가 이미 존재하면, 실제 엔티티 객체를 반환 단, getRef..
· ORM/JPA
이 학습 자료는 김영한님의 인프런 강의를 참고해서 만들었습니다. 1. 상속관계 매핑 관계형 데이터베이스는 상속 관계X → 슈퍼타입 - 서브타입 관계가 상속과 유사 즉, 상속관계 매핑이란 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것을 의미한다. 1.1 슈퍼타입 서브타입 관계 모델링 방법 @Inheritance(strategy = InheritanceType.XXX) JOINED : 조인 전략 SINGLE_TABLE : 단일 테이블 전략 TABLE_PER_CLASS : 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name = "DTYPE") : 조상 클래스에 붙이는 어노테이션으로, 사용하면 DTYPE 테이블이 생성되고, 자식 클래스의 이름으로 등록된다. @Discri..
· ORM/JPA
이 학습 자료는 김영한님의 인프런 강의를 참고해서 만들었습니다. 0. 매핑시 고려사항 다중성 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany → 실무에서 쓰면 안된다. 단방향, 양방향 테이블 : 외래 키 하나로 양쪽 조인 가능, 사실 방향이라는 개념X 객체 : 참조용 필드가 있는 쪽으로만 참조 가능, 한쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향(단반향 2개) 연관관계 주인 외래 키를 관리하는 참조 주인의 반대편 : 단순 조회만 가능 1. 다대일 [N:1] 관계 1.1 다대일 단방향 가장 많이 사용하는 연관관계 다대일의 반대는 일대다 1.2 다대일 양방향 외래 키가 있는 쪽이 연관관계 주인 양쪽을 서로 참조하도록 개발 2. ..
· ORM/JPA
이 학습 자료는 김영한님의 인프런 강의를 참고해서 만들었습니다. 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는다. 객체는 참조를 사용해서 연관된 객체를 찾는다. 1. 단방향 연관관계 1.1 객체를 테이블에 맞춰서 모델링 1.2 객체 지향 모델링(ORM 매핑) 2. 양방향 연관관계와 연관관계의 주인 2.1 양방향 매핑 단방향 → 양방향 매핑을 할 경우 테이블 연관 관계는 변화x(Join만 하면 됨) 객체의 양방향 관계는 서로 다른 단방향 연관관계 관계가 2개로 이루어져 있음 반면에 테이블에서는 외래키 하나로 양뱡향 연관관계를 가짐 2.2 연관관계의 주인(Owner) 객체의 두 관계중 하나를 연관관계의 주인으로 지정 연관관계의 주인만이 외래 키를 관리(등록, 수정) 주인이 아닌쪽은 읽기만 가능, ..
쿠엔크
'ORM/JPA' 카테고리의 글 목록