티스토리 뷰

728x90

검색 결과에 따라서 리스트를 반환해주는 기능을 구현하다가 위와 같은 버그를 만났다.

맨 처음 결과값은 잘 나오는데 그 두번째부터 값이 출력되지 않고 저 버그만 출력됨

 

원인

https://stackoverflow.com/questions/71642208/parameter-value-gabrek-did-not-match-expected-type-java-lang-character-n-a

 

하이버네이트 구현체에 의한 버그로 5.6.6과 5.6.7 그 이상에서 발생하는 버그라고 한다. 

원인은 캐싱에 의한 문제일거라 사람들은 예상하던데 본인의 하이버네이트 버전은 5.6.8로 아직 안 고쳐진걸로 보아 문제가 오래 갈 수도 있을 것같다

 

public interface ItemRepository extends JpaRepository<Item, Long> {
    
    Optional<List<Item>> findByNameContaining(String name);
}

 

본인의 코드는 위와 같다.

 

@Repository
public interface MyEntityRepository extends JpaRepository<MyEntity, Long> {

  List<MyEntity> findByNameStartsWith(String namePrefix);
}

 

이는 똑같은 버그가 발생하는 다른 사람의 코드인데

LIKE 쿼리를 날리는 모든 경우에서 생기지 않을까 생각

 

해결 방법

 

public interface ItemRepository extends JpaRepository<Item, Long> {
    
    Optional<List<Item>> findByNameContaining(@Param("q") String name);
}

 

일시적인 해결 방법은 매우 간단했다. 

Controller에서 받을 파라미터를 문제가 생긴 메서드에 명시적으로 작성해넣으면 끝

 

만약 본인처럼 간단한 경우가 아니라면 5.6.5 이하로 내리면 해결된다고 한다.

 

출처

https://github.com/spring-projects/spring-data-jpa/issues/2472
https://github.com/spring-projects/spring-data-jpa/issues/2479
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함