[Spring JPA] .save() 대해 문의 드립니다.
해결됨
4개의 테이블 (a, b, c, d) 각각 1:N 관계 입니다. a-b 1:N, b-c 1:N , c-d 1:N (fetchType = LAZY) 네개의 테이블에 대한 정보를 fetchjoin을 통해서 List<a> 객체로 리턴 받았습니다. List<a> 객체를 루프를 돌면서 a 객체 값에 특정 필드를 변경하고 .save()를 호출 했더니 update 쿼리만 나가는게 아니고 1) a 테이블의 id(pk)값의 조건 select 쿼리 1회 2) b 테이블 조건절에는 id(FK) select 쿼리 1회 3) 위에서 값이 조회될경우 c테이블에 b테이블 결과 id(PK) 값들로 IN 쿼리 1회 4) d 테이블 3)과 동일한 구조로 IN쿼리 1회 5) 최종 udpate 쿼리 호출 이런식의 마치 해당 a 객체 전체 데이터(하위 포함)를 조회 했을떄 날라가는 select쿼리가 모두 호출 되었습니다. 예) List<a> result = aRepository.getFetchJoinQuery(); result.stream ().forEach(a -> { a.setName("HOON"); aRepository.save (a); -> 해당 시점 위 쿼리 호출됨 logger.info("xxxxxx"); }); 디버깅으로 확인한 내용이구요, 혹시나 디버깅 모드에서 데이터 확인중에 날아간 쿼리인가 해서 디버깅없이 RUN으로 실행했을때도 동일하게 쿼리가 발생하는것이 확인 되었습니다.. save() 사용시에 select 쿼리 발생은 어쩔수 없는걸까요? 어쩔수 없다면 save() 메서드 대신 그냥 JPQL로 update 쿼리를 작성해서 사용하는 방법뿐이 없을까요? 궁금합니다!
- 김영한
- jpa
- springjpa





