준영속 상태 - 영속 -> 준영속 - 영속 상태의 엔티티가 영속성 컨텍스트에서 분리(detached) - 영속성 컨텍스트가 제공하는 기능을 사용 못함 Member member = entityManager.find(Member.class, 150L); member.setName("adfadaf"); entityManager.detach(member); //영속성 컨텐츠에서 제외 시켜버린다. 그러므로 커밋시점에 아무 일도 일어나지 않는다. ts.commit(); 이렇게 사용하면 detach에서 영속 컨텍스트에서 제외시켜버린다. 영속 상태였다가 영속 상태에서 빠지면 준영속 상태라 말한다. - em.detach(entity) : 특정 엔티티만 준영속 상태로 전환 - em.clear() : 영속성 컨텍스트를 완전..
플러시 - 영속성 컨텍스트의 변경내용을 데이터베이스에 반영 플러시 발생 - 변경 감지 - 수정된 엔티티 쓰기 지연 SQL 저장소에 등록 - 쓰기지연SQL저장소의 쿼리를 데이터베이스에 전송(등록,수정,삭제 쿼리) 영속성 컨텍스트를 플러시 하는 방법 - em.flush() 직접호출 - 트랜잭션 커밋 - 플러시 자동 호출 - JPQL 쿼리 실행 - 플러시 자동 호출 만약 아래와 같이 flust()를 직접 호출할 경우 Member member = new Member(200L, "member200"); entityManager.persist(member); entityManager.flush();//즉시 디비에 쿼리를 날린다. System.out.println("======"); ts.commit(); Hiber..
Member member = entityManager.find(Member.class, 150L); member.setName("zzzzzz"); ts.commit(); Hibernate: /* update helloJpa.Member */ update member set name=? where id=? 업데이트 쿼리를 날린 적이 없는데도 업데이트가 되어버린다. 그저 값을 set했을 뿐인데? 1차 캐시안에 스냅샷이라는 것이 있다. 이 스냅샷이란 값을 딱 읽어온 그 시점을 떠놓은 것이다. 그런 상태에서 entity가 변경 될 경우 비교를 한 뒤에 -> 다를 경우 쓰기 지연 SQL 저장소에 updateSql을 저장하며 커밋하는 시점에 업데이트 쿼리를 날린다.
쓰기 지연 SQL 저장소 - persist()를 사용했을 때 1차캐시에만 저장되는 것이 아니라, insertSql의 경우 "쓰기지연SQL저장소"에 저장 된다. 커밋 시점에 db에 보낸다. persistence.xml에서 관리 할 수도 있음 Member member1 = new Member(150L, "a"); Member member2 = new Member(160L, "b"); entityManager.persist(member1); entityManager.persist(member2); System.out.println("=======쓰기 지연 sql 저장소 이후======"); ts.commit(); 이런 것을 잘 사용하면 성능을 잘 먹고 사용할 수 있다.
EntityManager.persist(entity)는 사실 db에 저장하는게 아니라, entity를 영속성 컨텍스트라는 곳에 저장한다는 것이다. 엔티티매니저? 영속성 컨텍스트? - 영속성 컨텍스트는 논리적인 개념 - 눈에 보이지 않는다. - 엔티티 매니저를 통해서 영속성 컨텍스트에 접근 J2SE 환경 엔티티매니저와 영속성 컨텍스트가 1:1 (엔티티매니저를 생성하면 영속성 컨텍스트가 1:1로 생성된다.) ex) EntityManager -> 1:1 PersistenceContext (눈에 보이지 않는 공간) 엔티티 조회, 1차캐시 1. 만약 find를 이용해 조회를 한다면 jpa는 1차 캐시를 먼저 찾는다. @Id값이 키값이 되고 entity는 객체 자체가 된다. db를 먼저 찾는 것이 아니다. 2. 만..
- 비영속 (new/transient) ㄴ 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 //객체를 생성한 상태(비영속) Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); - 영속(managed) (persistence) 같은 느낌 ㄴ 영속성 컨텍스트에 관리되는 상태 //객체를 생성한 상태(비영속) Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); //객체를 저장한 상태(영속) e..
- Total
- Today
- Yesterday
- 스프링공부
- Java
- 항해플러스
- rejectValue
- ArgumentResolver
- React
- 향해플러스백엔드
- Intercepter
- 백엔드 개발자 역량
- JPA
- 향해99
- HTTP
- BindingResult
- 컨트
- thymleaf
- 예외처리
- 인터셉터
- 항해99
- 백엔드 개발자 공부
- jpa api
- 리터럴
- 로그인
- 스프링부트
- exception
- react실행
- reject
- hypertexttransferprotocol
- 향해플러스
- SpringBoot
- filter
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |