HelloJPA
@Entity : JPA가 관리할 객체
@Id : 데이터베이스 PK와 매핑
JPA에서는 트랜잭션이라는 단위가 매우 중요하다.
그래서 데이터를 변경하는 모든 작업은 JPA의 트랜잭션 안에서 작업해야 한다.
저장 -> em.persist()
조회 -> em.find() : 한 객체 조회할때
삭제 -> em.remove()
수정 -> em.setOOO()
수정 부분에서는 따로 em.persist()를 안해도 된다.
jpa가 자동으로 update 쿼리를 날려준다.
그 이유는 jpa를 통해서 entity를 가져오면 이 entity는 jpa가 관리를 한다.
그리고 jpa가 트랜잭션을 커밋하는 시점에 변경을 감지하여 업데이트 쿼리를 날린다.
주의
- 엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체에서 공유
- 엔티티 매니저는 쓰레드간의 공유 X (사용하고 버려야함)
- JPA의 모든 데이터 변경은 트랜잭션 안에서 실행
객체를 모두 조회하거나, 조건 또는 통계가 있는 객체를 반환할 땐
Jpql (엔티티 객체를 대상으로 쿼리를 할 수 있는 객체지향 쿼리 언어)을 사용해야한다.
List<Member> result = em.createQuery("select m from Member as m", Member.class)
.getResultList();
페이징을 할때도 .setFirstResult() 와 .setMaxResult()로 페이징 할 수 있다.
영속성 관리
JPA에서 가장 중요한 2가지
- 객체와 관계형 데이터베이스 매핑하기
- 영속성 컨텍스트
영속성 컨텍스트 -> 엔티티를 영구 저장하는 환경
엔티티의 생명주기
비영속(new/transient), 영속(managed), 준영속(detached), 삭제(removed)
영속성 컨텍스트의 이점
- 1차 캐시 : 성능 이점을 크게 얻지는 않음
- 동일성(identity) 보장
- 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
- 변경 감지(Dirty Checking)
- 지연 로딩(Lazy Loading)
플러시 -> 영속성 컨텍스트의 변경내용을 데이터베이스에 반영
플러시 하는 방법
- em.flush() - 직접 호출
- 트랜잭션 커밋 - 자동 호출
- JPQL 쿼리 실행 - 자동 호출
플러시는
- 영속성 컨텍스트를 비우지 않음
- 영속성 컨텍스트의 변경내용을 데이터베이스에 동기화
- 트랜잭션이라는 작업 단위를 중요시 -> 커밋 직전에만 동기화하면됨
준영속 상태 -> 영속 상태의 엔티티가 영속성 컨텍스트에서 분리(detached)
em.detach(entity), em.clear(), em.close()
인프런 김영한님의 JPA 기본편을 듣고 작성한 글입니다.
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의
JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런
www.inflearn.com
'JPA' 카테고리의 다른 글
JPA 연관관계 매핑 기초 (0) | 2022.05.13 |
---|---|
JPA 엔티티 매핑 (0) | 2022.05.11 |
JPA에 대해.. (0) | 2022.05.09 |
JPA 웹 계층 개발 - 홈 화면과 레이아웃 (0) | 2022.04.22 |
JPA 주문 도메인 개발 (0) | 2022.04.20 |
댓글