[postgis-users] problem with subselect in hql
Mikkel Troest
mikkle at mikkle.dk
Tue May 1 05:59:51 PDT 2007
Hi,
I have a newbie question, which I hope someone out there can help me with:
I have a spatial table, positions:
_____________________________________________________
| position_id (bigint) | position_lonlat (geometry) |- remaining columns
omitted...
-----------------------------------------------------
I can run the following sql query directly on the PostGreSQL DB:
select length2d_spheroid(theline, 'SPHEROID[\"WGS_1984\", 6378137,
298.257223563]') from ( select makeline(p1.position_lonlat,
p2.position_lonlat) as theline from positions p1, positions as p2 where
p1.position_id = 18 and p2.position_id = 19 ) theresult;
- It may seem mad, but my application needs to be able to get a
linestring between two arbitrary points.
-- The query does this and returns the length according to wgs84.
Right.
I've added the following to Norman Barker's PostGISDialect.java:
registerFunction( PostGISDialect.NAMESPACE + "length2d_spheroid", new
StandardSQLFunction("length2d_spheroid", Hibernate.DOUBLE) );
registerFunction( PostGISDialect.NAMESPACE + "makeline", new
StandardSQLFunction("makeline", Hibernate.custom(GeometryType.class) ) );
to be able to support the makeline and length2d_spheroid functions.
I try to translate this sql into hql:
Query lslen2dsph = session.createQuery("select
spatial.Length2d_spheroid(theline, 'SPHEROID[\"WGS_1984\", 6378137,
298.257223563]') from (select spatial.Makeline(pstart.geometry,
pend.geometry) as theline from RPosition pstart, RPosition as pend
where pstart = :pstart and pend = :pend) theresult");
lslen2dsph.setParameter("pstart", pstart);
lslen2dsph.setParameter("pend", pend);
//Note that pstart and pend are Geometries retrieved elsewhere...
//also note that RPosition is my annotated class - giving the same
table as "positions" in the sql above.
//another note: pstart.geometry is the same as p1.position_lonlat above.
When I run the query, I get:
2007-05-01 14:07:06 org.hibernate.hql.ast.ErrorCounter reportError
SEVERE: line 1:96: unexpected token: (
Exception in thread "main" org.hibernate.hql.ast.QuerySyntaxException:
unexpected token: ( near line 1, column 96 [select
spatial.Length2d_spheroid(theline, 'SPHEROID["WGS_1984", 6378137,
298.257223563]') from (select spatial.Makeline(pstart.geometry,
pend.geometry) as theline from
dk.bestikket.gps.server.persistence.RPosition pstart,
dk.bestikket.gps.server.persistence.RPosition as pend where pstart =
:pstart and pend = :pend) theresult]
Can anyone tell me what's wrong with my hql query (lslen2dsph)?
If I do a session.createSQLQuery() I have no problems getting thing run.
I would very much like, though, to
keep it in hql for consistency's sake, and to avoid confusion of
table/column names, etc.
Admittedly, both HQL and postgis are very new stuff to me, so I may
easily be missing some obvoius points.
Please bear with me if that is the case!
Thanks!
:O) Mikkel Troest
----------
This mail was scanned for viruses at mail.mikkle.dk by ClamAV (tm) and found to be virus free.
More information about the postgis-users
mailing list