티스토리 뷰

2022/jpa

day02[순수jpa, entity]

yanii 2022. 11. 15. 23:56

 

entity manager : entity 관리

요청 하나당 entity를 만들어줌.

요청2개 -> entity 2개 만듦.

각각의 entity가 jdbc를 쓴다.

jpa의 구현체가 hibernate > hibernate는 sqlsession 사용 > sqlsession에서는 jdbc를 사용 !

open session은 쓰면 사용자가 선택한 메소드에 따라서 select ~ delete까지 메소드를 적절하게 써준다.

if) select 사용 시, jdbc를 통해서 preparestatement로 execute가 될 것임.

exectuequery, executeupdate : 알맞는 메소드 진행될 것임.

 

entity manager는 persistenceContext 영역을 사용함.

persistenceContext 영역: entity를 관리하는 영역, 영속 컨텍스트

application context 영역: 자바 빈 컨테이너를 관리함.

 

entity manager안에 persistenceContext가 있다.

entity manager가 메모리에 할당되면 자기가 가진 영역 중에서 persistenceContext영역을 할당함.

이 영역에 등록시키는 메소드가 persist()이다.

insert > persist("엔티티") > "엔티티"가 persistenceContext안에 들어가게 된다. > 영속 컨텍스트

 

@PersistenceContext //jpa가 관리함. 영속컨텍스트를 만들어라는 어노테이션.

 

entityManager.persist(); //영속 컨텍스트에 등록

 

영속성 컨텍스트에 등록하는 이유?

flush() : 안에 있는 것을 비워주면서 목적지까지 도달하는 것 > 영속성 컨텍스트에 있는 내용을 쿼리로 내보낸다는 느낌.

persist() : insert라기보다 영속성 컨텍스트에 등록만 해주는 느낌으로 봐야 함. flush가 되어야 insert가 됨.

 

@Transactional : begin, commit 해주는 애, 트랜잭션에 대한 환경을 구축해줌.

@Rollback(false) : 단위테스트에만 사용 가능, 자동롤백 방지

 

Optional.ofNullable()  : 널인지 검사하는거

Assertions.assertThat : 알트+엔터 > add static import 엔터 > assertThat만 써도 됨.

 

persist() : 1차 캐시에 등록됨.

1차 캐시에 기억해놓고 엔티티를 관리함. 캐시 안에 있으면 select를 또 안함.(성능 최적화)

 

entityManager.flush(); //먼저 쿼리 내보내기//1차 캐시에 기억된 상태, 실무에서 사용할 수도 있음.

entityManager.clear(); //캐시 비우기//실무에서 거의 사용할 일 없음.

 

 

더티체킹

 

/*순서 메모*/ 꼼꼼히
엔티티2개 선언

1차 캐시 저장
INSERT
1ck(1차캐시삭제)
... 순서 메모하기...

 

영속상태:persistence영역에 있으면
비영속상태:persistence영역에 없으면, detach()

오류가 detach가 뜨면 비영속상태임을 알고 있자!

 

커밋 시 플러시가 자동 호출된다.

 

@PersistenceContext //주입하는게 아니라 주입받는 것!

 

 

 

 

 

 

Optional.ofNullable((null이 아닐 때 들어가는 것.).orElseGet())

orElse() : 내가 정해놓은 객체를 넣어주고, null일 때 여기에 있는 내용이 들어감.

orElseGet() : Supplier라서 람다식 사용 가능, 참조형으로 new를 쓸 수 있음.

!!NPE방어!!

 

 

 

'2022 > jpa' 카테고리의 다른 글

day03[JPA new project]  (0) 2022.11.30
day03[벌크 연산, Repository, 쿼리메소드]  (0) 2022.11.30
day02[JPQL]  (0) 2022.11.15
day02[create table]  (0) 2022.11.15
day02[JPA new project]  (0) 2022.11.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함