묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
변경감지(dirty checking) 관련 기본적인 질문
안녕하세요. 영속성 컨텍스트에서 변경 감지 (dirty checking) 부분 수강 중 질문이 있습니다. 변경감지란, 영속성 컨텍스트에서 조회(em.find)한 값을 변경하면, 1차 캐시도 자동으로 업데이트가 일어나는 현상으로 이해하였습니다. 위의 코드와 같이 em.find로 조회하는 경우 1차 캐시에도 Id=memberA 인 엔티티가 저장되는 것으로 알고 있는데요. 1차 캐시에 저장되는 엔티티의 주소가 x001이라고 했을 때, em.find로 가져온 객체 memberA도 같은 객체 (x001)를 가져오기 때문에, memberA의 값을 업데이트하면 1차 캐시 값도 자동으로 업데이트 되는게 맞을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
영속성 계층의 엔티티와 도메인 계층의 엔티티를 분리하였을 때의 변경 감지와 병합에 대하여 질문드립니다.
안녕하세요!해당 글과 관련되어 의문이 생겨 질문을 남기고 싶습니다. 해당 글에서 처럼 영속성 계층의 엔티티와 도메인 계층의 엔티티를 나누어 사용하는 상황에서, 데이터 변경의 처리에 관해 질문드립니다.우선 Layer를 다음과 같이 구분하였습니다.PresentationApplication DomainInfrastructure(Persistence) 간단하게 Member(Domain Layer)와, MemberJpaEntity(Infrastructure Layer)로 예시를 들어 의문을 가지는 상황에 대해서 말씀드리려 합니다. 이때 규칙을 Application Layer에서 Domain Layer만을 의존한다고 하였을 때, 다음과 같이 Member를 update하는 코드를 작성해야 한다 했을 때 아래와 같이 변경 감지를 사용할 수 없어 save를 재호출해야만 할 것 같은데, 이러한 경우 다른 방법이 있을까요?@Service @Transactional public MemberService { private final MemberRepository memberRepository; // 생성자 생략 public void update(Long id. String name) { Member member = memberRepository.findById(id); member.update(name); // 변경 감지 X -> Member는 Jpa의 @Entity가 아니기 때문 memberRepository.save(member); // 업데이트 하기 위해서는 필요함 } }@Repository @Transactional public MemberRepositoryImpl implement MemberRepository { private final MemberJpaRepository memberJpaRepository; // 생성자 생략 public Member findById(Long id) { MemberJpaEntity entity = memberJpaRepository.findById(id).orElse(null); return Mapper.toDomainEntity(entity); } public void save(Member member) { MemberJpaEntity entity = Mapper.toPersistenceEntity(member); memberJpaRepository.save(entity); } }
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
변경감지 스냅샷
예를 들어 Team(1) 엔티티안에 Member(N) 엔티티가 있습니다.(1:N) Team 엔티티를 조회 후, Member 엔티티를 수정 했을때 변경감지가 동작합니다. 그런데 이 때, Member 엔티티는 Team 엔티티의 필드이기 때문에 동작하는건지 Member 엔티티도 별도의 스냅샷으로 존재하는 건지 궁금합니다. 영속성컨텍스트의 스냅샷은 Team엔티티만 존재하는 걸까요? 아니면 Member 엔티티도 스냅샷으로 존재하는 걸까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
변경감지 스냅샷
1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요!! 강의 너무 잘 듣고 있습니다. :) 데이터베이스에서 객체를 가져와서, 변경을 하면 jpa가 변경감지를 한다고 알려 주셨는데 Member findMember = em.find(Member.class, 1L); findMember.setName("Hello"); 위 코드에서 em.find 할 때, 커밋 시점에 select를 하여 변경되기 전의 엔티티가 1차 캐시에 있는 게 아닌가요?? 그러면 1차 캐시에 있는 엔티티랑 스냅샷이랑 같아서 변경감지가 일어나지 않는데,,, 어떻게 스냅샷과 엔티티가 다른지 알고 싶습니다!