인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

taehee-kim-dev님의 프로필 이미지
taehee-kim-dev

작성한 질문수

실전! 스프링 데이터 JPA

파라미터 바인딩, 벌크 연산, 쿼리힌트 질문드립니다!

작성

·

170

0

안녕하세요 영한님!

강의 정말 잘 보고 있습니다.

몇 가지 궁금증이 생겨 질문드리게 되었습니다.

질문1. 파라미터 바인딩에 대해

Account findByUserId(String userId);

이 코드는

Account findByUserId(@Param("userId") String userId);

이 코드와 완전히 같고,

첫 번째 코드의 String userId의 userId를 @Param("userId")로 자동 변환해주어,

해당 부분이부분만 생략된건가요?

질문2. 벌크 연산에 대해

벌크 연산이랑 네이티브 쿼리랑 결국 같은건가요?

차이점을 모르겠습니다.

둘 다 한번에 업데이트하는것도, 영속성 컨텍스트에 반영 안되는 것도 같은 것 같아서요.

질문3. 쿼리 힌트에 대해

쿼리 힌트와 @Transactional(readOnly = true)는 같은건가요?

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. Taehee-kim-dev님^^

질문에 바로 답을 달아드릴께요.

질문1. 파라미터 바인딩에 대해

실전! 스프링 데이터 JPA 강의 초반에 설명드리는 내용을 한번 떠올려 보시면 3가지로 기능을 분류했던 기억이 나실꺼에요.

1. 공통메서드

2. 메소드 이름으로 쿼리 작성

3. @Query 사용

@Param은 @Query를 사용할 때만 적용됩니다. findByUserId()는 메소드 이름으로 쿼리를 작성하는 방법인데요. 이때는 @Param과 무관하게 순서만 맞추면 됩니다.

질문2. 벌크 연산에 대해

네 잘 파악하셨습니다. 둘은 거의 비슷하고, 차이는 네이티브 SQL을 사용하는가? 아니면 JPQL을 사용하는가?의 차이로 이해하시면 됩니다.

질문3. 쿼리 힌트에 대해

쿼리 힌트와 @Transactional(readOnly = true)는 서로 다른 기능입니다.

@Transactional(readOnly = true)는 스프링이 제공하는 트랜잭션 관리 기능이고, 여기서는 트랜잭션을 읽기 전용으로 사용하는 옵션을 넣었습니다.

반면에 쿼리 힌트는 하이버네이트 같은 JPA 구현체에게 제공하는 기능입니다. (사실 잘 사용하지는 않습니다.)

감사합니다.

taehee-kim-dev님의 프로필 이미지
taehee-kim-dev

작성한 질문수

질문하기