JPA 를 하다보면 JPQL 을 사용하기 어려운 경우가 있다. JPARepository 를 쓸 때에도 제공되는 메서드외에 따로 사용자가 만들어서 써야할 때가 있다. 이때
Native Query
를 사용하면 된다!!
@Query
안에는 Native Query
뿐 아니라 JPQL 도 사용 가능하다.@Query
어노테이션 안에서는 JPQL 이 아닌 일반 SQL을 쓰면 value 라는 속성값에다 적어준다. 그리고 쿼리문 다음에 nativeQuery
옵션값에 true 를 적어줘야 한다.@Modifying
어노테이션을 붙여준다.(UPDATE, DELETE , INSERT 같이 DB 에 영향을 줄 때만 사용)public interface SubscribeRepository extends JpaRepository<Subscribe, Integer> {
@Modifying
@Query(value =
"INSERT INTO subscribe(fromUserId, toUserId,createdDate) VALUES(:fromUserId, :toUserId, now())",
nativeQuery = true)
void mSubscribe(int fromUserId, int toUserId);
}
@RequiredArgsConstructor
@Service
public class SubScribeService {
private final SubscribeRepository subscribeRepository;
@Transactional
public void 구독하기(int fromUserId, int toUserId){
subscribeRepository.mSubscribe(fromUserId, toUserId);
}
}