【发布时间】:2016-10-02 11:34:29
【问题描述】:
我正在尝试使用 Hibernate 和 Hibernate Spatial 在我的 Java 代码中执行此查询:
Query q = s.createQuery("SELECT c FROM crimes c WHERE ST_DWITHIN(ST_MakeLine(ARRAY['SRID=4326;POINT(-49.30621000000001 -25.515020000000003)','SRID=4326;POINT(-49.30619 -25.515770000000003)','SRID=4326;POINT(-49.306180000000005 -25.5162)','SRID=4326;POINT(-49.305780000000006 -25.5162)']), c.location, 0.0001) = true;");
但是,这个查询会导致异常:
e = (org.hibernate.hql.internal.ast.QuerySyntaxException) org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE_BRACKET, found ',' near line 1, column 151 [SELECT c FROM com.safecity.server.db.model.EntityCrime c WHERE ST_DWITHIN(ST_MakeLine(ARRAY['SRID=4326;POINT(-49.305820000000004 -25.515330000000002)','SRID=4326;POINT(-49.306200000000004 -25.515340000000002)','SRID=4326;POINT(-49.30619 -25.515770000000003)','SRID=4326;POINT(-49.306180000000005 -25.5162)','SRID=4326;POINT(-49.305780000000006 -25.5162)']), c.location, 0.0001) = true]
我检查了查询,但找不到错误。但是,如果我得到同样的查询并在 postgres 控制台上执行,则查询执行时不会出现任何错误并返回正确的值。
拜托,有人可以帮助我吗? 谢谢。
【问题讨论】:
-
在此过程中,简化您的查询。
ST_DWITHIN()已经返回boolean。无需附加= true,这只是噪音:SELECT c FROM crimes c WHERE ST_DWITHIN(ST_MakeLine(ARRAY[ ... ]), c.location, 0.0001) -
谢谢,我会改的
标签: java postgresql hibernate hibernate-spatial