영상 후기 - 잉, 페퍼의Spring Data JPA 삽질일지
- 영속성 컨텍스트는 영속, 비영속, 준영속으로 나눌수 있다.
- 삭제 엔티티란 뭘까? 영속성된 객체를 삭제하면 조회는 하지만 그 객체 값을 불러오지 않는다. (그래서 딱히 조회 쿼리 발생이 안됨.) == ID값이 있고, 영속성 컨텍스트와 연결은 되어 있다.
- 영속성 컨텍스트 문제상황1
deleteAll()을 해서 DB에서 findAll로 DB정보 다 영속성컨텍스트 1차캐시속에 넣는다. 그런 뒤 1차캐시 이용헤서 해당 아이디들 쓰기 지연 SQL 저장소에 delete 쿼리문들 등록한다.
그 후 saveAll() 실행하는데 1차 캐시에 없어서 DB로 insert 날리는데 id 유니크 걸려 있어서 insert 가 안된다.
쓰기 지연 SQL 저장소는 커밋될때 DB로 flush()발동한다.
- 문제해결 방법 세가지
- 강제로 flush한다. test 아니면 잘 사용안한다.
- JPQL사용. flush 되고 JPQL이 나간다.
- 여러개의 트랜잭션으로 나누고 먼저 커밋하는 방법.