본문 바로가기
Jpa

[Jpa] modifying queries can only use void or int/Integer as return type 에러

by 소금_msg 2022. 9. 8.

Jpa를 사용해서 비밀번호변경 기능 구현중에 에러가 났다.

 

modifying queries can only use void or int/Integer as return type! Offending method: public abstract java.util.Optional mood.moodmyapp.repository.JpaMemberRepository.updatePw(java.lang.String,java.lang.String)

 

Optional<String> updatePw(String updatePw, String userId);

이렇게 Optional로 감싼 String 타입을 반환해서 .isPresent() 로 실행여부를 체크하려고 했는데

modifying 쿼리는 void타입이거나 Integer 타입 둘 중 하나만 쓸 수 있다고 에러메세지가 떴다.

@Repository
public interface JpaMemberRepository extends JpaRepository<Member, String>, MemberRepository {
//  비워있어도 잘 작동함
//  JpaRepository 인터페이스를 상속받을 때 엔티티 클래스의 타입(Member)과 PK에 해당하는 데이터 타입(String) 선언하면
    //해당 엔티티 클래스와 매핑되는 테이블의 CRUD기능을 사용할 수 있다.

    @Modifying(clearAutomatically = true)
    @Query("UPDATE Member m SET  m.userPw = :updatePw WHERE m.userId = :userId")
    @Override
    Optional<Integer> updatePw(String updatePw, String userId);
}

 

Optional<Integer> updatePw(String updatePw, String userId);

Integer 타입으로 변경해주고 실행이 잘 된다.