You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
EntityManager: 엔티티를 저장하고, 수정하고, 삭제하고, 조회하는 등 엔티티와 관련된 모든 일을 처리
엔티티를 저장하는 가상의 데이터베이스로 생각
EntityManagerFactory: 엔티티 매니저를 만드는 공장, 단 하나만 생성(비용이 크기 때문에)
영속성 컨텍스트(persistencecontext): '엔티티를 영구 저장하는 환경'
영속성 컨텍스트가 관리하는 엔티티를 영속 상태라고 함
영속성 컨텍스트는 엔티티를 식별자 값(@Id)으로 구분 함, 따라서 영속 상태는 식별자 값이 반드시 있어야 함
JPA는 보통 트랜잭션을 커밋할 때 영속성 컨텍스트에 새로 저장된 엔티티를 DB에 반영 => 플러시 라고 함
영속성 컨텍스트가 엔티티를 관리함으로서 생기는 이점
- 1차 캐시
- 동일성 보장
- 트랜잭션을 지원하는 쓰기 지연
- 변경 감지
- 지연 로딩
양방향 매핑 규칙: 연관관계 주인
- 연관관계의 주인만이 데이터베이스 연관관계와 매핑되고 외래키를 관리할 수 있음
- 반면에 주인이 아닌 쪽은 읽기만 가능
- 주인은 mappedBy 속성을 사용하지 않음
- 주인이 아니면 mappedBy 속성을 사용해서 속성 값으로 연관관계의 주인을 지정
- 연관관계의 주인은 외래키가 있는 곳
- 다대일, 일대다 관계에서는 항상 다(Many)쪽이 외래키를 가진다. => @ManyToOne이 연관관계의 주인
ClassMember {
@ManyToOne@JoinColumn(name="TEAM_ID")
privateTeamteam;
...
classTeam {
@OneToMany(mappedBy="team")
privateList<Member> members = newArrayList<>();
ClassMember {
@ManyToOne@JoinColumn(name="TEAM_ID")
privateTeamteam;
// 연관관계 편의 메소드publicvoidsetTeam(Teamteam) {
this.team = team;
team.getMembers().add(this);
}
양방향 매핑은 복잡하다. 우선 단방향 매핑을 사용하고 필요시 양방향을 사용하자!
다대다 매핑
- 새로운 기본키 전략
Member <-> Product 엔티티가 다대다일때
Member -> Order <- Product 와 같이 중간 엔티티를 하나 둘 것(Order 엔티티는 각 엔티티의 ID를 FK로 가짐)
@EntitypublicclassOrder {
@Id@GeneratedValue(strategy = GenerationType.IDENTITY)
@ColumnprivateLongid;
@ManyToOne@JoinColumn(name = "MEMBER_ID")
privateMembermember;
@ManyToOne@JoinColumn(name = "PRODUCT_ID")
privateProductproduct;
...
}
@MappedSuperclass
- 실제 테이블과 매핑되지 않음
- 등록일자, 수정일자, 등록자, 수정자 등 여러 엔티티에서 공통적으로 사용하는 속성을 관리
즉시 로딩(EAGER) + 지연 로딩(LAZY) <<프록시>>
https://zzang9ha.tistory.com/347?category=990401
영속성 전이(CASCADE)
https://zzang9ha.tistory.com/350?category=990401
값 타입
@Embeddable: 값 타입을 정의하는 곳에 표시
@Embedded: 값 타입을 사용하는 곳에 표시
객체지향 쿼리
- JPQL
- Criteria
- QueryDSL
- NativeSQL
투 포인터(Two Pointer) 알고리즘
배열에서 완전 탐색으로 시간 초과가 날 경우, 투 포인터 개념을 이용할 수 있음
2개의 포인터(index)를 이용해서 하나의 인덱스는 앞에서부터, 다른 인덱스는 끝에서 부터 접근하는 방식
자바 ORM 표준 JPA 프로그래밍 도서
영속성 관리
투 포인터(Two Pointer) 알고리즘
2개의 포인터(index)
를 이용해서 하나의 인덱스는 앞에서부터, 다른 인덱스는 끝에서 부터 접근하는 방식시간차이 롸
참고1
참고2
The text was updated successfully, but these errors were encountered: