У меня был сайт, на котором хранятся данные моих сайтов с широтой и долготой.PostgreSQL 9.4, используйте earth_distance в моей JPA namedQuery
ozssc=> \d site;
......
site_latitude | double precision |
site_longitude | double precision |
......
Я добавил к моему PostgreSQL серверу 9.4.3
CREATE EXTENSION cube;
CREATE EXTENSION earthdistance;
Есть все функции были добавлены в моей базе данных, и я изменил владельца функции на мой логин пользователя.
Когда я попытался Psql на мой сервер и выполнить:
ozssc=> select * from site s where earth_box('-28.175613','153.52578399999993',100000) @> ll_to_earth(s.site_latitude,s.site_longitude);
ERROR: function earth_box(unknown, unknown, integer) does not exist
LINE 1: select * from site s where earth_box('-28.175613','153.52578...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
и когда я попытался поставить earth_box функцию в моем имени запроса в JPA, как:
@NamedQuery(name = "SiteEntity.findByEarthDistance", query = "SELECT s FROM SiteEntity s WHERE earth_box((ll_to_earth(:positionLatitude, :positionLongitude), :range) @> ll_to_earth(s.siteLatitude,s.siteLongitude))"),
Мой IntelliJ жалуется есть не функция сопоставление ??
Когда я попытался развернуть мое JavaEE приложение к моему WebLogic 12c, я нашел ошибку, как:
Message icon - Error An error occurred during activation of changes, please see the log for details.
Message icon - Error Exception [EclipseLink-0] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.JPQLException Exception Description: Syntax error parsing [SELECT s FROM SiteEntity s WHERE earth_box((ll_to_earth(:positionLatitude, :positionLongitude), :range) > ll_to_earth(s.siteLatitude,s.siteLongitude))]. [33, 151] The expression is not a valid conditional expression.
Message icon - Error Substituted for missing class Exception [EclipseLink-0] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd) - org.eclipse.persistence.exceptions.JPQLException Exception Description: Syntax error parsing [SELECT s FROM SiteEntity s WHERE earth_box((ll_to_earth(:positionLatitude, :positionLongitude), :range) > ll_to_earth(s.siteLatitude,s.siteLongitude))]. [33, 151] The expression is not a valid conditional expression.
Я потерял направление сейчас, Может ли один помочь мне пожалуйста !!
Редактировать Опять
Я нашел там должна быть некоторые ошибки в earth_box функции PostgreSQL 9.4, она не всегда может получить правильный набор результатов, я должен изменить его earth_distance функции и использовать несколько проецирование выбора для сделать его хорошо работать, более новый namedQuery как:
@NamedQuery(name = "SiteEntity.findBySiteLNR", query = "SELECT s, FUNC('earth_distance', FUNC('ll_to_earth',:positionLatitude, :positionLongitude), FUNC('ll_to_earth',s.siteLatitude,s.siteLongitude)) AS dfcl " +
"FROM SiteEntity s WHERE dfcl < :range ORDER BY dfcl"),
Я не использовал спящий режим, вместо того, я использую EclipseLink и JPA 2.1, EJB контейнер Weblogic 12С, спецификация EJB 3.1.