java - hibernate spatial example
Hibernate Spatial 5-GeometryType (5)
Después de actualizar Hibernate-spatial a la versión 5.0.0.CR2, la siguiente declaración ya no funciona:
@Column(columnDefinition = "geometry(Point,4326)")
@Type(type = "org.hibernate.spatial.GeometryType")
private Point position;
con un:
org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [org.hibernate.spatial.GeometryType]
Como puedo ver, la clase ya no existe en el archivo jar. ¿Qué ha pasado con el GeometryType y cómo se reemplaza? ¿O hay otro archivo jar para incluir?
Edición: para aclaraciones. Estoy usando Hibernate-Spatial en combinación con una base de datos PostgreSQL-Postgis.
Así que he estado luchando contra este problema durante unos días, lo que quiero es que el tipo de base de datos sea del tipo postgis para poder realizar consultas a distancia eficientes para el vecino más cercano, etc. Finalmente, descubrí cómo hacerlo. y quería compartirlo con la comunidad, así que creé un proyecto de demostración que contenía la solución al problema.
Mi configuración es una base de datos PostgreSQL con Postgis, Spring boot jpa, Hibernate 5+, Hibernate-spatial 5+ y también se agregó la conversión a la salida de descanso, que nuevamente requería un módulo especial de jackson.
el proyecto se encuentra en https://github.com/Wisienkas/springJpaGeo
El código importante que pedías era este:
@type(type = "jts_geometry")
private Point point;
Bueno, la solución es demasiado fácil de ver. Simplemente elimine la anotación @Type, para que la declaración se vea así:
@Column(columnDefinition = "geometry(Point,4326)")
private Point position;
Source :
Tenga en cuenta la anotación @Type. Esto informa a Hibernate que el atributo de ubicación es de tipo Geometría. La anotación @Type es específica de Hibernate, y es la única anotación no JPA que se requiere. (En futuras versiones de Hibernate (versión 5 y posteriores) ya no será necesario declarar explícitamente los atributos de Tipo de geometría).
Estoy utilizando hibernate 4.3.6 y hibernate spatial 5.2.2. La solución sugerida anteriormente no funcionó para mí. Sin embargo, el siguiente código funcionó si agrego hibernación espacial 4.3
@Type(type="org.hibernate.spatial.GeometryType")
private Point location;
La solución sugerida por Denis anteriormente no me funcionó en Hiberate 5 spatial y Mysql. Sin embargo las siguientes anotaciones funcionaron para mí.
@Column(name = "location",columnDefinition="Geometry")
private Geometry location;
@Column(name = "pointlocation",columnDefinition="Point")
private Point pointlocation;
Para Hibernate Spatial 5.2.x, todo lo que necesita es lo siguiente en su entidad.
private Point location;
No necesita columnDefinition o Type como las soluciones mencionadas anteriormente.
Algunos detalles adicionales y verificaciones para ver si funciona arriba.
- Tan pronto como ejecute su configuración y use
desc table_name
en mysql, debería ver el tipo de campo de geometría . Esto indica que su hibernación a la base de datos de asignación está funcionando bien. - Ahora intente crear una entidad y repo.save (entidad) desde java y su entidad debería guardar bien sin ningún error.
Si la configuración anterior no funcionó bien, normalmente obtendrá el error
Truncamiento de datos: no se puede obtener el objeto de geometría de los datos que envía al campo GEOMETRY Blockquote
Espero que ayude a alguien a ahorrar 6 horas que desperdicié!