ale*_*lex 1 postgresql spring hibernate postgis
我有这个问题:我可以使用地理类型列写入Postgis表,并且数据输入正确。当我尝试取回它时,出现java.lang.IllegalArgumentException:无法转换org.postgresql.util.PGobject类型的对象
我正在使用Hibernate Spatial 4.0M1,Postgis 2.0.2,Postgresql 9.1.7和Spring 3.2,Postgis-jdbc 2.0.2,我也尝试了1.5.2和Postgresql-jdbc 9.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;
}
Run Code Online (Sandbox Code Playgroud)
}
这是我得到的错误
java.lang.IllegalArgumentException:无法转换org.postgresql.util.PGobject org.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.hibernatetype。 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。实体.AbstractEntityLoader.load(AbstractEntityLoader.java:82)org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:72)组织。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.java:150交易拦截器。TransactionInterceptor.invoke(TransactionInterceptor.java:110)org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.fin:java:204)$ Proxy24。 (未知源)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(AbstractHandlerMethodAdapter。 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)
如果有人感兴趣:问题是PostGIS PGObject从列类型返回a Geography而不是从列类型返回PGGeometry,因此PGgeometry无法转换为。我发现使用jdbcTemplate(而不是Hibernate)的解决方案是将字段从结果集中转换为PGObject,然后创建PGGeometry如下所示的代码:
PGgeometry geo = new PGgeometry(myPGObject.getValue());
Run Code Online (Sandbox Code Playgroud)
这样做,geo.getValue()以SRID=4326;POINT(40.70686417491799 -74.01572942733765)我想要的形式返回一个字符串。我可以使用查询进行查询,ST_AsText但它会失去精度。我对Hibernate不太了解,无法提出解决方案,但这对我的用例来说已经足够了。
| 归档时间: |
|
| 查看次数: |
3165 次 |
| 最近记录: |