JPA - 자바 ORM기술입니다.
ORM : 객체와 관계형 데이터베이스를 매핑해주는 기술입니다.
객체 프로그래밍과 데이터베이스는 같게 설계될 수 없는 구조입니다.
현재 데이터베이스의 핵심 기술은 관계형 데이터베이스입니다. 마찬가지로 프로그래밍의 핵심은 객체입니다.
이런 두 관계 사이에서 패러다입의 불일치가 발생했습니다.
이런 불일치를 해소하기 위해 ORM기술이 사용되었고 자바에서 사용할 수 있는 JPA가 만들어졌습니다.
JPA에서 가장 중요한 2가지가 있습니다.
1. 객체와 관계형 데이터베이스 매핑
2. 영속성 컨텍스트
JPA에서 영속성 컨텍스트가 베이스가 되기 때문에 영속성 컨텍스트에 대해서 우선 정리를 해보겠습니다.
영속성 컨텍스트
- JPA를 이해하는데 가장 중요한 용어
- "엔티티를 영구 저장하는 환경"이라는 뜻
- EntityManager.persist(entity);
엔티티 메니저, 영속성 컨텍스트
- 영속성 컨텍스트는 논리적인 개념입니다.
- 엔티티 매니저를 통해서 영속성 컨텍스트에 접근할 수 있습니다.
J2SE환경
EntityManager -> PersistenceContext
1 : 1
엔티티의 생명주기
- 비영속 : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태
- 영속 : 영속성 컨텍스트에 관리되는 상태
- 준영속 : 영속성 컨텍스트에 저장되었다가 분리된 상태
- 삭제 : 삭제된 상태
// 비영속
Member member = new Member();
member.setId(100L);
member.setName("hello");
// 영속
em.persist(member);
- 만들어진 Member객체가 persist의 여부에 따라 비영속과 영속의 관계로 나뉩니다.
- 영속성 상태가 된다고 하더라도 데이터베이스에는 저장되지 않습니다.
Member member = new Member();
member.setId(100L);
member.setName("hello");
// 영속
System.out.println("=========");
em.persist(member);
System.out.println("=========");
- 만약 데이터베이스에 저장이 된다면 persist를 했을 때 쿼리문이 만들어져야 합니다.
- 결과는 persist를 실행했을 때는 쿼리문이 발생하지 않았습니다.
- 그렇다면 언제 쿼리문이 발생하고 데이터베이스에 저장되는 것일까요?
// 비영속
Member member = new Member();
member.setId(100L);
member.setName("hello");
// 영속
System.out.println("=========");
em.persist(member);
System.out.println("=========");
tx.commit();
- tx.commit()이 실행될 때 데이터베이스로 저장됩니다.
- 이밖에도
em.detach(member) -> 회원엔티티를 영속성 컨텍스트에서 분리 : 준영속 상태로 만들어 줍니다.
em.remove(member) -> 회원엔티티 객체를 데이터베이스에서 삭제시킵니다.
이제 바로 데이터베이스에 바로 저장하고 지우면 되는데 영속성 컨텍스트라는 것을 사용하는지에 대해서 생각해보겠습니다.
- 1차 캐시
- 동일성 보장
- 트랜잭션을 지원하는 쓰기 지연
- 변경 감지
- 지연 감지
위에 적은 기능들을 영속성 컨텍스트를 이용하여 사용할 수 있습니다.
다음 포스팅에서도 천천히 알아가 보도록 하겠습니다.
출처
https://www.inflearn.com/course/ORM-JPA-Basic
'JPA' 카테고리의 다른 글
JPA 엔티티 매핑 - 필드와 컬럼 매핑 (0) | 2021.11.23 |
---|---|
JPA 엔티티 매핑 - 데이터베이스 스키마 자동 생성 (0) | 2021.11.16 |
JPA 엔티티 매핑 - 소개 및 객체와 테이블 매핑 (0) | 2021.11.15 |
jpa - 플러시, 준영속 상태 (0) | 2021.10.16 |
JPA - 영속성 컨텍스트2 (0) | 2021.10.16 |
댓글