You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cayenne.apache.org by Rafael López Torres <ra...@juntadeandalucia.es> on 2013/01/29 10:54:08 UTC

spatial operations with selectQuery

Hi,
I need some help with spatial operations in cayenne.
How can i do spatial operations with SelectQuery?

With SQLTemplate, no problem, but prefetching not working for me, and
performance is very bad.
The next code  is for SQLTemplate prefetch:

SQLTemplate sqlQuery = new SQLTemplate(
                    Recinto.class,
                    "SELECT "
                            + "#result('t1.ID_RECINTO_ALFANUM' 'Long' ''
'toRecintoAlfanum.ID_RECINTO_ALFANUM'), "                           
                            + "#result('t2.ID_RECINTO_GEOM' 'Long' ''
'toRecintoGeom.ID_RECINTO_GEOM'), "
                            + "#result('t2.SD_GEOM'
'com.vividsolutions.jts.geom.Geometry' ) "
                            + "FROM SGPCD_RECINTOS t0,
SGPCD_RECINTOS_ALFNUM t1, SGPCD_RECINTOS_GEOM t2 "
                            + "WHERE t0.ID_RECINTO_ALFANUM =
t1.ID_RECINTO_ALFANUM AND "
                            + " t0.ID_RECINTO_GEOM = t2.ID_RECINTO_GEOM
AND "
                            + "t0.IU_IL_RECINTO=23747616");
           
           
            sqlQuery.addPrefetch("toRecintoAlfanum");

But the following error is displayed:
-----------------trace begin
org.apache.cayenne.reflect.PropertyException: [v.3.0.2 Jun 11 2011
09:26:09] Error reading DataObject property: toRecintoGeom
    at
org.apache.cayenne.reflect.generic.DataObjectBaseProperty.readPropertyDirectly(DataObjectBaseProperty.java:71)
    at
org.apache.cayenne.access.PrefetchProcessorNode.clearNullRelationships(PrefetchProcessorNode.java:140)
    at
org.apache.cayenne.access.PrefetchProcessorNode.connectToParents(PrefetchProcessorNode.java:130)
    at
org.apache.cayenne.access.HierarchicalObjectResolver$PostProcessor.startJointPrefetch(HierarchicalObjectResolver.java:295)
    at
org.apache.cayenne.query.PrefetchTreeNode.traverse(PrefetchTreeNode.java:170)
    at
org.apache.cayenne.query.PrefetchTreeNode.traverse(PrefetchTreeNode.java:179)
    at
org.apache.cayenne.access.HierarchicalObjectResolver.resolveObjectTree(HierarchicalObjectResolver.java:94)
    at
org.apache.cayenne.access.HierarchicalObjectResolver.synchronizedRootResultNodeFromDataRows(HierarchicalObjectResolver.java:72)
    at
org.apache.cayenne.access.DataDomainQueryAction$ObjectConversionStrategy.toResultsTree(DataDomainQueryAction.java:579)
    at
org.apache.cayenne.access.DataDomainQueryAction$SingleObjectConversionStrategy.convert(DataDomainQueryAction.java:625)
    at
org.apache.cayenne.access.DataDomainQueryAction.interceptObjectConversion(DataDomainQueryAction.java:455)
    at
org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:129)
    at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:743)
    at
org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:334)
    at
org.apache.cayenne.util.ObjectContextQueryAction.executePostCache(ObjectContextQueryAction.java:104)
    at
org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:91)
    at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1293)
    at
org.apache.cayenne.access.DataContext.performQuery(DataContext.java:1282)
    at
es.juntadeandalucia.agapa.gis.ide.cad.persistence.GeoEntityGenericDAOImpl.restore(GeoEntityGenericDAOImpl.java:224)
    at
es.juntadeandalucia.agapa.gis.ide.cad.control.GeoEntityControlImpl.load(GeoEntityControlImpl.java:185)
    at
es.juntadeandalucia.agapa.gis.ide.cad.rest.GeoEntityResource.getGeoEntity(GeoEntityResource.java:149)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at
com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
    at
com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205)
    at
com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
    at
com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
    at
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
    at
com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
    at
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
    at
com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
    at
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1480)
    at
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1411)
    at
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1360)
    at
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1350)
    at
com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
    at
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
    at
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at
org.apache.cayenne.conf.WebApplicationContextFilter.doFilter(WebApplicationContextFilter.java:93)
    at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.NullPointerException
    at
org.apache.cayenne.reflect.generic.DataObjectBaseProperty.readPropertyDirectly(DataObjectBaseProperty.java:68)
-----------------trace end

Can anybody help me, please
Thank a log.

P.D.: sorry my bad english. I hope you understand my question/problem

Re: spatial operations with selectQuery

Posted by Aristedes Maniatis <ar...@maniatis.org>.
On 29/01/13 8:54pm, Rafael López Torres wrote:
> SQLTemplate sqlQuery = new SQLTemplate(
>                      Recinto.class,
>                      "SELECT "
>                              + "#result('t1.ID_RECINTO_ALFANUM' 'Long' '' 'toRecintoAlfanum.ID_RECINTO_ALFANUM'), "
>                              + "#result('t2.ID_RECINTO_GEOM' 'Long' '' 'toRecintoGeom.ID_RECINTO_GEOM'), "
>                              + "#result('t2.SD_GEOM' 'com.vividsolutions.jts.geom.Geometry' ) "
>                              + "FROM SGPCD_RECINTOS t0, SGPCD_RECINTOS_ALFNUM t1, SGPCD_RECINTOS_GEOM t2 "
>                              + "WHERE t0.ID_RECINTO_ALFANUM = t1.ID_RECINTO_ALFANUM AND "
>                              + " t0.ID_RECINTO_GEOM = t2.ID_RECINTO_GEOM AND "
>                              + "t0.IU_IL_RECINTO=23747616");
>
>
>              sqlQuery.addPrefetch("toRecintoAlfanum");

Someone else who uses SQLtemplates more than me might be able to correct me on this, but I don't think prefetch is going to work along with SQLtemplate. It is designed to work with a normal Cayenne query and probably isn't going to be able to munge the SQL to add the extra join. The error message could be clearer though.

I don't know MS-SQL, but could you achieve a similar result by using a view and then a SelectQuery? Alternatively you might be able to edit the database adapter to support additional data types.


Ari


-- 
-------------------------->
Aristedes Maniatis
GPG fingerprint CBFB 84B4 738D 4E87 5E5C  5EFA EF6A 7D2E 3E49 102A