자바 ORM 표준 JPA 프로그래밍 기본편(김영한) 1
2022.04.16
JPA 정리
- 엔티티 매니저
- 엔티티 매니저 팩토리에서 엔티티 매니저들을 생성하며, 각 엔티티 매니저는 DB 커넥션 풀을 사용힌다.
- 엔티티 매니저를 통해서 영속성 컨텍스트 생성한다.
- 영속 상태는 커밋상태가 아니다. 커밋은 트랜잭션 단위이다.
- 영속성 컨텍스트의 특징
- 1차 캐시
- 동일성 보장
- 쓰기 지연(persist, flush)
- 변경 감지
- 지연 로딩(lazy)
- 연관관계
- 연관관계 주인을 판단하는 기준 : 외래키를 갖고있는가 또는 등록수정이 빈번한가
- 연관관계 주인에서는 컬럼에 @JoinColumn으로 조인 시 어떤 컬럼을 사용할 것인지 명시 가능하다.
- 연관관계 주인이 아닌 쪽에서는 mappedBy로 양방향 연관관계를 설정해줄 수 있다.
양방향은 DBMS상에서는 없는 개념이지만 엔티티에서는 참조가능하다. - 다대다 연관관계는 중간 테이블을 사용힌디/ - 일대다 & 다대일 테이블로 연결
- cascade와 orphanRemovel를 통해 자식객체를 제어할 수 있다.
부모엔티티에 있는 연관관계에서 사용 (@OneToOne 또는 @OneToMany) - 프록시 객체로 조회하고, 초기화 요청들어가면(호출되면) 실제 객체에서 정보 추출
캐시에 있다면 바로 실제 객체를 반환한다.
- 값 타입과 임베디드 타입
- 임베디드 타입은 객체 속성을 응집시킬 뿐만 아니라 도메인 메서드를 통해 개별적 처리가 가능하다.(객체지향적)
- 임베디드 타입을 한 엔티티에서 두 번 참조할 때 DB에 필드가 다르게 들어가야한다.
-> 이 경우, AttributeOverride 어노테이션으로 컬럼명을 설정해줄 수 있다. - 임베디드 타입은 같은 객체를 사용했을 때 객체 수정 시 모든 값이 변경될 수 있다.
여러 엔티티에 공유하지 말고 각각 생성해야하며 수정 시에도 생성자를 통해 통으로 변경해야한다. - 되도록이면 엔티티화(연관관계)하는 것이 식별자를 통해 추적, 변경할 수 있기 때문에 편리하다.
- 상속관계
- @Inheritance(strategy=InheritanceType.XXX)
- 전략
- JOINED
- 부모 자식 모두 테이블이 생성되며, 부모와 자식테이블은 부모의 pk로 연관관계가 이어져있다.
- 자식 insert 시 부모까지 insert되며, 조인을 통해서 테이블을 관리한다.
- SINGLE_TABLE
- 부모 테이블만 생성되며 자식 엔티티는 부모 테이블에 컬럼으로 추가된다.
- 부모클래스에 @DiscriminatorColumn(name="DTYPE; 컬럼 이름")
- 자식클래스에 @DiscriminatorValue("컬럼의 값으로 사용할 이름")
- PER_CLASS
- 자식 엔티티들만 독립적인 테이블을 생성하며 모두 부모 엔티티의 컬럼을 가진다.
- 자식 테이블의 pk는 부모 테이블의 pk를 사용한다.
- JOINED
댓글을 작성해보세요.