ORM ? Object-relational mapping - 객체 관계 매핑
- 객체는 객체대로 설계
- 관계형 데이터베이스는 관계형 데이트베이스대로 설계
- 객체와 데이터베이스를 ORM 프레임워크가 중간에서 매핑
Java collection을 사용하듯 CRUD 활용 가능
- create > jpa.persist(member)
- select > Member member = jpa.find(mamberId)
- update > member.setName("newName") [변경감지]
- delete > jpa.remove(member
영속성 컨텍스트란.. 엔티티를 영구 저장하는 환경
EntityManager.persist(entity 객체);
- database에 저장하는것이 아니라 영속성 컨텍스트에 저장한다. entity객체를 영속화 한다는 뜻
- EntityManager를 통해 영속성 컨텍스트에 접근
예제로 이해하기
1차 캐시와 동일성 보장
- 같은 트랜잭션 안에서는 같은 엔티티를 반환 > 조회 성능 향상
- DB isolation level 이 read commit이어도 애플리케이션에서 repeatable read 보장
트랜잭션을 지원하는 쓰기 지연
- transaction을 commit할 때까지 insert sql을 모아둔다
- JDBC BATCH SQL기능을 사용해 한 번에 sql 전송
지연로딩과 즉시로딩
- 지연로딩 > 객체가 실제 사용될 때 로딩
- 즉시로딩 > JOIN SQL로 한번에 연관된 객체까지 미리 조회
예제로 이해하기
- 비영속(new/transient)
영속성 컨텍스트와 관계 없는 새로운 상태- 영속(managed)
영속성 컨텍스트에 관리되는 상태- 준영속(detached)
영속성 컨텍스트에 저장되었다가 분리된 상태- 삭제(removed)
삭제된 상태
참조 : 김영한님 JPA 강의