본문 바로가기
728x90
반응형

Tech/JPA6

[JPA] 준영속 엔티티 수정 (변경 감지/병합(merge)) 준영속 상태  준영속 상태란?영속성 컨텍스트가 관리하는 영속 상태의 엔티티가 영속성 컨텍스트에서 분리된 것영속성 컨텍스트가 제공하는 기능을 사용하지 못함영속 상태 → 준영속 상태 만들기em.detach(entity) : 특정 엔티티만 준영속 상태로 전환em.clear() : 영속성 컨텍스트를 완전히 초기화 (test case)em.close() : 영속성 컨텍스트를 종료준영속 엔티티준영속 엔티티란?영속성 컨텍스트가 더 이상 관리하지 않는 엔티티DB에 한번 저장되어 식별자가 존재하는 객체  → 준영속 엔티티는 JPA가 관리하지 않기 때문에 객체를 수정해고 DB에 Update가 일어나지 않는다.(예시) 강의에서는 Form 으로 데이터 수정한다. [ItemController] /** * 삼품 수정.. 2024. 6. 18.
[JPA] 'N+1 문제'와 @BatchSize 전체 목록을 출력하기 위해서 게시글을 조회하면, 게시글 하나마다 이미지를 조회하는 쿼리가 실행되는 것을 확인하였다. → 'N+1' 문제 N+1 문제 연관 관계에서 발생하는 이슈로 엔티티를 조회할 때 조회된 데이터 갯수(N)만큼 연관 관계의 조회 쿼리가 추가로 실행되어 데이터를 읽어오는 것을 말한다. 더 찾아보니깐 이것의 근본적인 원인은 관계형 데이터베이스와 객체지향 언어 사이의 패러다임 차이로 인해서 발생하는 문제라고 한다. (객체지향은 Random Access를 통해 연관 객체에 접근가능하지만, RDB는 select 쿼리를 통해서만 조회 가능) N+1문제는 근본적으로 성능저하를 일으키므로 해결해야하는 문제이기도 하다! 보완책 @BatchSize @BatchSize size 속성을 이용하여 N번에 해당하.. 2024. 4. 17.
[JPA] @EntityGraph 사용 하위 엔티티를 로딩할 때 가장 간단한 방법은 eager(즉시) 로딩을 사용하는 것이지만, @OneToMany를 비롯하여 가능한한 lazy(지연) 로딩을 이용하는 것이 기본적이다. 지연 로딩이지만, 한번에 조인 처리로 select이 이루어지도록 하는 방법이 있다. @EntityGraph @EntityGraph란, JPA에서 fetch 조인을 어노테이선을 통해 사용할 수 있도록 하는 기능이다. 연관관계가 있는 엔티티를 조회할 경우 지연로딩으로 설정되어 있는 경우의 연관관계에서 종속된 엔티티는 쿼리 실행 시 select이 되지 않고 proxy 객체를 만들어 엔티티가 적용시킨 후 해당 proxy 객체를 호출할 때마다 select 쿼리가 실행된다. - attributePaths 속성을 이용해서 같이 로딩해야 하는.. 2024. 4. 16.
[JPA] 영속성의 전이 (cascade) Board(상위 엔티티)와 BoardImage(하위 엔티티) 저장은 영속성의 전이이다. BoardImage 객체가 JPA에 의해서 관리되면 BoardImage를 찹조하고 있는 Board 객체도 같이 처리되어야 한다. 영속성의 전이(cascade)란? 상위 엔티티와 하위 엔티티의 연관 관계를 상위 엔티티에서 관리하는 경우에 신경써야 하는 것이 있다. 바로 상위 엔티티 객체의 상태가 변경되었을 때 하위 엔티티 객체들 역시 같이 영향을 받는다는 것이다. 이걸 JPA에서는 영속성의 전이라고 표현한다. JPA에서는 이런 경우 연관 관계에 cascade 속성을 부여해서 제어하도록 한다. cascade 속성 값 내용 PERIST REMOVE 상위 엔티티가 영속 처리될 때 하위 엔티티들도 같이 영속 처리됨 MERGE .. 2024. 4. 15.
728x90
반응형