2013-01-21 15 views
7

पुनर्प्राप्त करने के लिए एसक्यूएल क्वेरी मैं पोस्टग्रेस्क्ल, हाइबरनेट-स्थानिक और पोस्टगिस का उपयोग कर रहा हूं और एक ज्यामिति ऑब्जेक्ट को पुनर्प्राप्त करने के लिए एसक्लुक्वायर का उपयोग करने में सक्षम होने की उम्मीद है।हाइबरनेट-स्थानिक: एक ज्यामिति

हालांकि जब भी मैं क्वेरी करने के लिए कोशिश एक प्वाइंट, बहुभुज या ज्यामिति जैसे

List list = session.createSQLQuery(
    "select geomfromewkt('SRID=1;POINT(1 1)')").list(); 

मैं मिल अपवाद:

Caused by: org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111 
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:78) 
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:103) 
    at org.hibernate.dialect.Dialect.getHibernateTypeName(Dialect.java:328) 
    at org.hibernate.loader.custom.CustomLoader$Metadata.getHibernateType(CustomLoader.java:590) 
    at org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.performDiscovery(CustomLoader.java:516) 
    at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:532) 
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1962) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:802) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) 
    at org.hibernate.loader.Loader.doList(Loader.java:2533) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276) 
    at org.hibernate.loader.Loader.list(Loader.java:2271) 
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:316) 
    at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1842) 
    at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165) 
    at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:157) 

hibernate.cfg.xml:

<property name="dialect">org.hibernatespatial.postgis.PostgisDialect</property> 

है यह हाइबरनेट-स्थानिक पेशकश का हिस्सा नहीं है या क्या मैं कुछ गलत कर रहा हूं?

धन्यवाद, पॉल।

प्रासंगिक पुस्तकालयों/संस्करणों:

  • हाइबरनेट कोर-3.6.0.Final.jar
  • PostgreSQL-9.0-801.jdbc4.jar
  • हाइबरनेट-स्थानिक-PostGIS-1.1.1 .jar
  • हाइबरनेट-स्थानिक-1.1.1.jar
  • PostGIS-JDBC-1.3.3.jar
  • जेटीएस-1.12.jar
+0

क्या डीबी स्थानिक रूप से सक्षम है और सही विशेषाधिकार हैं? क्लाइंट से, 'geometry_columns' से चुनें * –

+0

हां डीबी ठीक है। मैप किए गए वर्गों और गैर देशी-एसक्यूएल प्रकार के प्रश्नों (मानदंड/एचएसक्यूएल) का उपयोग करते हुए मैं हाइबरनेट के माध्यम से ज्यामिति पुनर्प्राप्त कर सकता हूं। – pstanton

+0

मुझे यकीन है कि मुझे किसी भी तरह से कॉलम में 'org.hibernatespatial.GeometryUserType' लागू करना होगा ... – pstanton

उत्तर

6

मैंने इसे समझ लिया है। मुझे स्केलर के माध्यम से कॉलम में 'ज्यामिति यूज़र टाइप' लागू करने की आवश्यकता है।

SQLQuery qry = session.createSQLQuery("select geomfromewkt('SRID=1;POINT(1 1)') as geom"); 
qry.addScalar("geom", GeometryUserType.TYPE); 
List<Geometry> list = qry.list(); 
+0

[इस उत्तर] के अनुसार (http://stackoverflow.com/a/10256646/1228324) कुछ प्रकारों को बहिष्कृत किया गया था और इस प्रकार हाइबरनेट 4+ में हटा दिया गया। 'GeometryUserType.TYPE' के बजाय मुझे Hibernate 4.1.4 में 'org.hibernate.spatial.GeometryType.INSTANCE' का उपयोग करना पड़ा। – Michi

+1

किसी ने हाइबरनेट 5+ में समान करने की कोशिश की? – pstanton

1
मैं हाइबरनेट 5.1.0 अंतिम उपयोग कर रहा हूँ

,

dao.getSession().createSQLQuery("select buffer from puntosdeinteres where puntoid = 13193") 
         .addScalar("buffer", new GeolatteGeometryType(PGGeometryTypeDescriptor.INSTANCE)) 
         .uniqueResult(); 

और यह काम करता है, लेकिन अभी मुझे लगता है कि लंबे समय से बयान असहज।

संबंधित मुद्दे