자바 ORM 표준 JPA 프로그래밍 기본편(김영한) 1

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를 사용한다.

 

 

댓글을 작성해보세요.