1

私はこの問題を抱えています:地理タイプの列でPostgisテーブルに書き込むことができ、データが正しく入力されています。それを取り戻そうとすると、java.lang.IllegalArgumentExceptionが発生します:タイプorg.postgresql.util.PGobjectのオブジェクトを変換できません

私はHibernateSpatial4.0M1、Postgis 2.0.2、Postgresql 9.1.7、Spring 3.2、Postgis-jdbc 2.0.2を使用しており、1.5.2とPostgresql-jdbc9.1-901も試しました。

これは私のクラスの関連部分です

public class Poi {
@Id
@GeneratedValue(generator="t_pois_poisid_seq")
private long poisid;
@Column(name="name")
private String name;
@Column(name="userid")
private int owner;
//@Column(columnDefinition = "Geometry", name="location")
@Type(type="org.hibernate.spatial.GeometryType")
private Point location;


public Poi(){}

public Poi(String name, int owner, String wktPoint){
    this.name = name;
    this.owner = owner;
    WKTReader fromText = new WKTReader();
    Geometry geom = null;
    try{
        geom = fromText.read(wktPoint);
    }catch(ParseException e){
        throw new RuntimeException("Not a WKT string:" + wktPoint);
    }
    if (!geom.getGeometryType().equals("Point")) {
        throw new RuntimeException("Geometry must be a point. Got a " +  geom.getGeometryType());
    }
    //geom.setSRID(4326);
    this.location = (Point) geom;

}

}

そして、これは私が得るエラーです

java.lang.IllegalArgumentException:タイプorg.postgresql.util.PGobjectorg.hibernate.spatial.dialect.postgis.PGGeometryValueExtractor.toJTS(PGGeometryValueExtractor.java:99)org.hibernate.spatial.dialect.AbstractJTSGeometryValueExtractorのオブジェクトを変換できませんextract(AbstractJTSGeometryValueExtractor.java:42)org.hibernate.spatial.dialect.AbstractJTSGeometryValueExtractor.extract(AbstractJTSGeometryValueExtractor.java:37)org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:269)org。 nullSafeGet(AbstractStandardBasicType.java:265)org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:238)org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:357)org。hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2807)org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1545)org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1477)org。 hibernate.loader.Loader.getRow(Loader.java:1377)org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:644)org.hibernate.loader.Loader.doQuery(Loader.java:854)org.hibernate。 loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:293)org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:263)org.hibernate.loader.Loader.loadEntity(Loader.java:1977)org.hibernate.loader。 entity.AbstractEntityLoader.load(AbstractEntityLoader.java:82)org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:72)org。hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3821)org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:458)org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java: 427)org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:204)org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:260)org.hibernate.event.internal.DefaultLoadEventListener.onLoad( DefaultLoadEventListener.java:148)org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1075)org.hibernate.internal.SessionImpl.access $ 2000(SessionImpl.java:175)org.hibernate.internal.SessionImpl $ IdentifierLoadAccessImpl.load (SessionImpl.java:2421)org.hibernate.internal.SessionImpl.get(SessionImpl.java:971)com.prismio.pois.api.repository.HibernatePoiRepository.findOne(HibernatePoiRepository.java:30)sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)sun .reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)java.lang.reflect.Method.invoke(Method.java:601)org.springframework.aop.support .AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation。 .transaction.interceptor。TransactionInterceptor.invoke(TransactionInterceptor.java:110)org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)$ Proxy24.findOne (不明なソース)com.prismio.pois.api.controller.PoiController.getUser(PoiController.java:40)sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)sun .reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)java.lang.reflect.Method.invoke(Method.java:601)org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)org .springframework.web.method.support。InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter。 invokeHandleMethod(RequestMappingHandlerAdapter.java:746)org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:687)org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAd java:80)org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)org.springframework.web.servlet。FrameworkServlet.processRequest(FrameworkServlet.java:915)org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:811)javax.servlet.http.HttpServlet.service(HttpServlet.java:621)org.springframework.web。 servlet.FrameworkServlet.service(FrameworkServlet.java:796)javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

4

1 に答える 1

5

誰かが興味を持っている場合: 問題は、PostGIS がではなくPGObject列型から a を返すため、へのキャストができないことです。jdbcTemplate (Hibernate ではなく) を使用して見つけた解決策は、結果セットからフィールドをキャストしてから、次のように作成することです。GeographyPGGeometryPGgeometryPGObjectPGGeometry

PGgeometry geo = new PGgeometry(myPGObject.getValue());

これを行うと、私が望んでいgeo.getValue()た形式の文字列が返されます。SRID=4326;POINT(40.70686417491799 -74.01572942733765)を使用してクエリを実行できますが、ST_AsText精度が失われます。これに対する解決策を提案できるほど Hibernate についてよく知りませんが、私のユースケースではこれで十分です。

于 2013-01-10T15:29:19.907 に答える