Hibernate Spatial 5-GeometryType
après avoir mis à jour Hibernate-spatial vers la Version 5.0.0.CR2 la déclaration suivante ne fonctionne plus:
@Column(columnDefinition = "geometry(Point,4326)")
@Type(type = "org.hibernate.spatial.GeometryType")
private Point position;
avec:
org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [org.hibernate.spatial.GeometryType]
<!-Comme je peux le voir, la classe n'existe plus dans le fichier Jar. Qu'est-il arrivé au GeometryType et comment est-il remplacé? Ou y a-t-il un autre fichier jar à inclure?
Edit: Pour obtenir des éclaircissements. J'utilise Hibernate-Spatial en combinaison avec une base de données PostgreSQL-Postgis.
5 réponses
eh Bien la solution est trop facile à voir. Il suffit de supprimer l'annotation @Type, de sorte que la déclaration ressemble à ceci:
@Column(columnDefinition = "geometry(Point,4326)")
private Point position;
notez l'annotation @Type. Ceci informe Hibernate que l'attribut de localisation est de géométrie de type. L'annotation @Type est spécifique à L'hibernation, et la seule annotation Non-JPA qui est requise. (Dans les versions futures D'hibernation (version 5 et suivantes) il ne sera plus nécessaire de déclarer explicitement le Type de géométrie-valeur attributs.)
la solution suggérée par Denis ci-dessus ne fonctionnait pas pour moi sur Hiberate 5 spatial et Mysql. Cependant les annotations suivantes ont fonctionné pour moi
@Column(name = "location",columnDefinition="Geometry")
private Geometry location;
@Column(name = "pointlocation",columnDefinition="Point")
private Point pointlocation;
donc je me bats contre ce problème depuis quelques jours, le truc c'est que je voulais que le type de base de données soit du type postgis afin que je puisse exécuter des requêtes de distance efficaces pour le voisin le plus proche, etc. J'ai enfin compris comment le faire et je voulais le partager avec la communauté, j'ai donc créé un projet de démonstration contenant la solution à ce problème.
ma configuration est une base de données PostgreSQL avec Postgis, Spring boot jpa, Hibernate 5+, Hibernate-spatial 5+ et a également ajouté la conversion pour la sortie de repos, qui a de nouveau exigé un module spécial de jackson.
le projet est disponible sur https://github.com/Wisienkas/springJpaGeo
le code important vous demandait:
@type(type = "jts_geometry")
private Point point;
Pour Les Zones D'Hibernation 5.2.x, Tout ce dont vous avez besoin est le dessous dans votre entité.
private Point location;
vous n'avez pas besoin de colonnedefinition ou de Type comme les solutions mentionnées ci-dessus.
quelques détails et vérifications supplémentaires pour voir si cela fonctionne
- dès que vous exécutez votre installation et utilisez
desc table_name
dans mysql, vous devriez voir le type de champ géométrie. Cela indique que votre cartographie hibernation-base de données fonctionne fin. - Maintenant, essayez de créer une entité et des pensions.enregistrez (entity) depuis java et votre entity devrait enregistrer fine sans aucune erreur.
si la configuration ci-dessus n'a pas bien fonctionné, vous obtiendrez typiquement l'erreur
troncature des données: Impossible d'obtenir un objet de géométrie à partir des données que vous envoyez au champ de géométrie Blockquote
L'espoir qui aide quelqu'un à sauver 6 heures que j'ai gaspillées !
j'utilise l'hibernation 4.3.6 et l'hibernation spatiale 5.2.2. La solution suggérée ci-dessus n'a pas fonctionné pour moi. Cependant le code ci-dessous a fonctionné si j'ajoute Hibernate spatial 4.3
@Type(type="org.hibernate.spatial.GeometryType")
private Point location;