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