본문 바로가기
Spring

[SpringBoot/IntelliJ] Spring Data JPA 게시판 조회수 업데이트 , java lang IllegalStateException For queries with named parameters you need to use provide names for method parameters Use Param for query method parameters or when on Java 8 use th..

by noddu 2022. 4. 15.
728x90
반응형

구글링을 통해 찾아본결과

많은 예제가 SpringDataJPA여서 이걸 사용해봤다

 

 

Repository

public interface SpringDataJpaMemberRepository extends JpaRepository<MainBoard, Long> {

    @Modifying
    @Query("update MainBoard m set m.mainProductHit = m.mainProductHit + 1 where m.mainProductId = :id")
    int updateCount(@Param("id") int id);
}

 

Service

private final SpringDataJpaMemberRepository springDataJpaMemberRepository;


public MainBoardService(MainBoardRepository mainBoardRepository, SpringDataJpaMemberRepository springDataJpaMemberRepository) {
        this.mainBoardRepository = mainBoardRepository;
        this.springDataJpaMemberRepository = springDataJpaMemberRepository;
    }

public int updateHit(int id){
    return springDataJpaMemberRepository.updateCount(id);
}

다른것은 일반 JPA를 사용해서

SpringDataJpaMemberRepository의 생성자를 추가했다(이름 바꿀예정)

 


Controller

@GetMapping("/mainProductBoard/Detail{no}")
public String boardDetail(@PathVariable int no, Model model){
    MainBoard boardOne = mainBoardService.findOne(no).get();

    model.addAttribute("boardOne",boardOne);
    mainBoardService.updateHit(no);
    return "boards/boardDetail";
}

기존 findOne을 통해 게시물 하나를 보냈는데

updateHit(no)로 Service -> repository를 거쳐 쿼리문을 실행해 조회수(mainProudctHit)가 +1 업데이트되게 구현했다

 


 

java lang IllegalStateException For queries with named parameters you need to use provide names for method parameters Use Param for query method parameters or when on Java 8 use the javac flag parameters

 

여기서 에러가 발생한다

 

@Param 어노테이션을 사용하거나 (Java 8+에서) -parameters 를 사용하라는 것

 


해결

public interface SpringDataJpaMemberRepository extends JpaRepository<MainBoard, Long> {

    @Modifying
    @Query("update MainBoard m set m.mainProductHit = m.mainProductHit + 1 where m.mainProductId = :id")
    int updateCount(@Param("id") int id);
}

SpringDataRepository에 updateCount함수에 다음과 같이 @Param을 추가했다

반응형