Development/Daily Error

[JPA] No Dialect mapping for JDBC type: 1111

📝 작성 : 2022.06.28  ⏱ 수정 : 
반응형

Intro

JPA 사용 중 native 쿼리를 사용해야 할 일이 있어 nativeQuery = true 옵션을 걸고 쿼리를 작성 했습니다.

그런데 생소한 에러메시지가 나오며 UUID의 맵핑이 제대로 이루어지지 않았습니다.

image-20220628154337259

org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111

원인

image-20220628154537933

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를 생성하는 과정이었기 때문에 필요하지 않았습니다.

이상입니다.

반응형