[JPA] 쓰기 지연의 장점 등
쓰기 지연의 장점데이터베이스의 락의 최소화 Uploaded by N2T
- 자바/JPA
- · 2023. 11. 19.
쓰기 지연의 장점데이터베이스의 락의 최소화 Uploaded by N2T
JPA 예외의 기본 구조JPA 표준 예외는 javax.persistence.PersistenceException의 자식 클래스해당 예외 클래스는 RuntimeExcetion 의 자식임.언체크 예외JPA 예외의 분류트랜잭션 롤백을 표시하는 예외심각한 예외로 강제로 커밋도 안됨.롤백 X개발자가 커밋할지 롤백할지 선택이 가능하다.아래부터는 책에 있던 에러내역을 표기한다.참고트랜잭션 롤백을 표시하는 주요 예외들javax.persistence.EntityExistsException: EntityManager.persist(..) 호출 시 동일한 엔티티가 이미 있을 때 발생.javax.persistence.EntityNotFoundException: EntityManager.getReference(..) 호출 후 ..
트랜잭션을 롤백하면 DB 의 변경사항만 원래대로 돌아간다고 한다.!수정된 상태로 영속성 컨텍스트에는 남아있다고 한다.만약 해당 내용을 모르고 JPA 를 사용한다면 엄청 위험한 상황이 도래할 수 있을 것 같다고 생각이 든다..라고 생각했지만 역시 스프링 프레임워크가 트랜잭션 AOP 시점에 다 컨트롤을 하고 있었군..어떻게 대처?트랜잭션이 롤백된 영속성 컨텍스트를 그대로 사용하는 건 위험하다새로운 영속성 컨텍스트를 생성혹은엔티티매니저 의 clear 를 호출하여 영속성 컨텍스트를 초기화한 후에 사용해야 한다!스프링의 접근 방식기본 전략트랜잭션 AOP 종료 시점에 트랜잭션 영속성 컨텍스트도 종료된다고 한다.롤백후에 문제가 발생하지 안흥더 자세한 내용은 JpaTransactionManager 의 doRollbac..
@Test void transactionalEntityEqualsTest() { Member member = new Member("테스트", null); em.persist(member); Member member1 = memberRepository.findById(member.getId()) .orElseThrow(); System.out.println("member1 = " + member1); System.out.println("member1 == member = " + (member1 == member)); System.out.println("member1.equals(member) = " + member1.equals(member)); }member1 = Member(id=3, name=테스트)..
data jpa 에서의 save 메서드의 내부 로직은 이렇다public S save(S entity) { Assert.notNull(entity, "Entity must not be null"); if (entityInformation.isNew(entity)) { entityManager.persist(entity); return entity; } else { return entityManager.merge(entity); } }주어진 엔티티가 일단 새로운 엔티티인지 아닌지를 판단한다.이는 entityInformation.isNew(entity) 를 통해 이루어진다.entityInformation 은 엔티티에 대한 메타데이터를 제공하는 클래스이며isNew 는 엔티티가 새로운 것인지 아닌지를 판단하는 로..
@Test void transactionalEntityEqualsTest() { Member member = new Member("테스트", null); memberService.join(member); Member findMember = memberService.findMember(member.getId()); System.out.println("findMember = " + findMember); System.out.println("findMember == member = " + (findMember == member)); System.out.println("findMember.equals(member) = " + findMember.equals(member)); }@Service @RequiredA..