반응형
Intro
JPA 사용 중 native 쿼리를 사용해야 할 일이 있어 nativeQuery = true
옵션을 걸고 쿼리를 작성 했습니다.
그런데 생소한 에러메시지가 나오며 UUID의 맵핑이 제대로 이루어지지 않았습니다.
org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
원인
https://github.com/spring-projects/spring-data-jpa/issues/1796
이미 오래전부터 알려져있었지만 고치지 않기로 결정 된 Hibernate 이슈 라고 합니다.
Hibernate 구현체에서는 addScalar
를 활용 하길 추천하지만 특정 구현체에 의존하지 않고 Spring Data JPA 를 이용할 경우에는 cast를 통해 해결 하라고 권장 합니다.
해결
쿼리문에서 UUID를 varchar로 캐스팅 하면 간단하게 문제가 해결 됩니다.
SELECT cast(i.id as varchar) as id FROM item i WHERE i.id = :id
저는 이 방법으로 해결 했습니다.
이렇게 하고 나서 필요할 경우에는 String을 다시 UUID로 변환 해 주면 됩니다.
저는 Postgres 데이터베이스를 사용 하고 있는데요
또 다른 해결책으로 java.util.UUID 타입을 Postgres 의 UUID와 매핑 해주면 된다고 합니다.
@Type(type="uuid-char")
어노테이션을 엔티티의 해당 요소에 달아 주면 간단하게 해결 된다고 하는데
Postgres 에서는
@Type(type="pg-uuid")
저는 엔티티가 아닌 DTO를 생성하는 과정이었기 때문에 필요하지 않았습니다.
이상입니다.
반응형
'Development > Daily Error' 카테고리의 다른 글
[Spring Redis] incompatible types for field 해결 (0) | 2022.08.17 |
---|---|
[Java] Unsupported class file major version 61 해결하기 (0) | 2022.08.14 |
[Maven 에러] java.lang.IllegalStateException: Unable to load cache item (0) | 2022.06.24 |
SCP 사용중 Permission denied 대처법 (0) | 2022.06.21 |
Docker ERROR: the image for the service you’re trying to recreate has been removed (0) | 2022.06.20 |