[JPA] Point 좌표값 could not deserialize

Cho-D-YoungRae·2022년 11월 10일
0

문제

아래의 repository 메서드를 실행하자 예외가 발생하였고, 엔터티 구조도 아래와 같습니다.

org.springframework.orm.jpa.JpaSystemException: could not deserialize; nested exception is org.hibernate.type.SerializationException: could not deserialize

해결

문제는 Restaurant.Address.location 의 Point 를 deserialize 하지 못 하는 것으로 보입니다.

이 문제를 해결하기 위해서 3가지를 해주었습니다.

hibernate-spatial

좌표 정보를 사용하기 위해서는 dependency 에 Hibernate-spatial 을 추가해야 한다고 하는데, 저는 이를 하지 않고 있었습니다. 그래서 해당 의존성을 추가해주었습니다.

그 이후 dialect 설정을 해주었습니다.

spring.jpa.database-platform=org.hibernate.spatial.dialect.mysql.MySQL8SpatialDialect

Point 객체

Address 도메인 클래스를 보면 저는 org.springframework.data.geo.Point 를 사용하고 있는 것을 볼 수 있습니다. 하지만 org.locationtech.jts.geom.Point 를 사용해주어야 한다고 합니다. 그래서 아래와 같이 수정하였습니다.

createPoint 메서드 안에서 GeometryFactory 클래스가 메서드가 호출될 때마다 계속 생성되어서 다소 비효율적으로 보일 수 있으나, Restaurant, Address 도메인 클래스는 처음 데이터 초기화 시에 데이터베이스에 모든 데이터가 초기화 되고 해당 메서드 들은 테스트 혹은 특정 상황에서만 사용되는 것이어서 큰 문제는 없습니다.

참고

0개의 댓글