liée à Question précédente . J'ai une application Roo Spring en utilisant Hibernate pour écrire un objet géométrique dans une base de données PostGIS à l'aide de JTS. Je crois que j'ai réparé les problèmes que j'avais dans la définition de mon objet géométrie et que Hibernate exécute sa méthode persist (), mais quelque chose ne va pas juste avant qu'il ne frappe la DB et que je reçois l'exception ci-dessous.
Voici quelques lignes intéressantes. D'abord des journaux hibernés, l'objet à persister, puis une requête SQL (probablement le? Est substitué): p> alors encore plus de choses se produisent, bien que rien de toute évidence mauvaise . Cependant, je ne vois aucune "finale" SQL, et il y a une tentative de retourner la transaction. Alors: p> J'essaie d'obtenir ce cas d'utilisation simple (un objet avec une seule propriété de géométrie) travaillant pendant plus d'une semaine maintenant et je suis à propos de mon bout du rouleau. Si je remplace l'objet géométrie avec une chaîne, cela fonctionne simplement bien. Est-ce que quelqu'un sait ce qui pourrait causer une telle erreur? P> Modifier: Strong> La réponse de Thierry ci-dessous me faisait piquer à travers la source, et j'ai remarqué que l'exception est lancée dans en particulier, notez le commentaire de la classe suggérant que quelque chose est clairement faux avec le mappage de dialecte hibernate. Malheureusement, je n'ai aucune idée de ce que cela signifie, mais je suppose que c'est due à une sorte de désactivation de la version. (Notez également la Déclaration de SQL Type 3000, conformément à Mon précédent erreur !) p> Ma dialecte actuelle est géométrysqltypeescriptor < / Code>, qui a un contenu intéressant: p>
org.ibernate.spatial.dialect.postgis.postgisdialect code>, selon le Guide d'utilisation spatial Hibernate . J'utilise Hibernate spatial 4.0-M1, JTS 1.12 et PostGIS 2.0.1. Je vais essayer avec quelques versions différentes de Postgis peut-être, en particulier depuis que c'est la seule dépendance que l'hibernation spatiale est censée fournir mais ne semble pas. P> p>
3 Réponses :
Oui, le Avez-vous essayé d'utiliser le type suivant: et le dernier truc de XML à l'intérieur Le tutoriel que vous avez suivi est clair: p> regardant le code à l'intérieur de 05-2011 ). P> bonne chance! p> p> ? code> est substitué par les valeurs que vous devez stocker.
géométrytructype code> et non le
et non GeometryType Code>?
Je soupçonne
géométrytype code> n'est pas directement pris en charge par l'API du projet spatial Hibernate. C'est peut-être une classe abstraite que vous ne pouviez pas instancier directement pour mapper vos données avec des annotations - il agit au-delà de la scène que nous avons expérimenté. P>
causé par: java.lang.unsupportedoperationException code > Qui m'a fait dire ça. P>
Je crois comprendre que le géométryusertype était le type correct pour Hibernate spatial 1.0 et qu'il a été remplacé par GeometryType Hibernate spatial 4.0. org.hibernate.spatial.geometryRyReRyRyRyRySerType code> n'existe pas dans 4.0. L'alternative la plus proche est
org.hibernate.spatial.geometryrsqltypedScriptor code>, mais sans surprise qui échoue aussi.
Ok, je ne me souviens pas de ces informations. Bonne prise.
Mais cela mène à des points intéressants! Voir la question modifiée.
J'ai regardé ça. Il semble que nous ne sentais rien, mais rien à résoudre ... Je vous suggère de lire de l'aide sur le Forum officiel ou demander de l'aide aller à la creule de leur système de liste de diffusion.
Merci Thierry, vous êtes une légende. Je frappe juste la liste de diffusion maintenant. Peut-être que ma plus grande faiblesse attend toujours trop longtemps pour demander de l'aide :).
Ne vous inquiétez pas - c'est la même chose pour beaucoup de gens.
Il semble que le problème était que le postgisdialect n'a pas été ramassé et intégré correctement, et donc les opérations requises n'étaient pas prises en charge. La solution était aussi simple que la mise à niveau d'hibernate 3.6.9.final à 4.1.6.final!
Voir mon fil sur la liste de diffusion pour plus d'informations . P>
Selon ce fil, vous devriez aussi être Consciente qu'à partir d'hibernate spatial 4.0-M1, seul le type de géométrie est spécifié à hibernate, et d'où le Avec cette anthologie de modifications, je peux enfin écrire un point sur une base de données! La spécification de propriété correcte est la suivante: p> @column code> Annotation doit STRY> SET
COLONTDEFINITION = "Géométrie" / Code>, et pas strong>
point code> ou autre chose. Cela peut être fixé à l'avenir. P>
Content de le savoir! Je pense que c'était lié à une autre chose comme du Guide de migration hibernate 3.6 , partie 4) < Code> Si vous utilisez Hibernate 3.6.0 avec PostgreSQL, la variable d'environnement globale, hibernate.jdbc.utilisation_streams_for_binary, doit être définie sur FALSE si vous utilisez des propriétés Clob ou Blob. De plus, en utilisant des propriétés matérialisées_blob et matérialisées_clob avec PostgreSQL est actuellement cassée. Voir HHH-4617 pour plus de détails (fixe en 3.6.1) Code>
Pour les autres lecteurs du futur: la solution pour lancer la géométrie Lorsque vous l'imprimez à l'écran et lancer le point à la géométrie avant de les stocker à l'intérieur de la base de données est une bonne solution de contournement jusqu'à ce que le projet Postgis traite des sous-types de géométrie en tant que types d'hibernation appropriés. Peut-être que vous pourriez faire cela dans une couche DAO, le cas échéant.
Cette série de questions et de réponses a sauvé mon projet. Merci beaucoup à vous tous!
Excellent! Je détesterais que quiconque ait à passer à travers tout cela.
@Travis: Je suis désolé de dire que je n'ai aucune idée de quoi faire alors. Je ne me souviens même pas de ce que je me suis fait moi-même. Je vous recommanderais de poursuivre le problème sur la liste de diffusion (liée ci-dessus), puisque ces gars connaissent leurs affaires.
@orlade Merci beaucoup de partager la solution à ce problème. J'ai eu le même problème avec le point et la géométrie. Mais dans mon cas, lorsque j'essaie de le persister, la base de données a répondu avec une clascastexception, qu'il n'est pas capable de lancer org.postgis.point à un point de Vividsolution. J'utilise donc le point Vividsolution au lieu de la version postgis. Je ne sais pas pourquoi cela nécessite maintenant un objet complètement différent. Mais je suis heureux que mon code fonctionne.
Cela ne fonctionne plus avec Hibernate 5.x car il vise à éviter les types.
J'ai reçu cette exception lorsque j'ai oublié d'ajouter la dialecte PostGis dans le fichier de configuration hibernate.
Ajouter une ligne suivante à hibernate.cfg.xml strong> p> <property name="dialect">org.hibernate.spatial.dialect.postgis.PostgisDialect</property>
J'ai pu supprimer la dépendance sur
postgis-jdbc code> dans pom.xml sans plainte, donc probablement hibernate spatial glisse la bonne version de cela pour moi. Cependant, le problème persiste (HAH).