2016-12-16 4 views
0

фон:Hibernate Пространственный и наследие дб

У меня есть унаследованное БД, и я не могу изменить свою схему. Mapping моего лица выглядит следующим образом:

class SomeObject { 
    @Column(name = "LONGITUDE", nullable = false) 
    public BigDecimal longitude; 

    @Column(name = "LATITUDE", nullable = false) 
    public BigDecimal latitude; 

    ... 
} 

Проблема:

Мне нужно создать запрос спящего режима, который будет выбирать все SomeObjects по кругу. I через hibernate пространственный должен быть правильным инструментом для решения этой проблемы. Но все примеры, которые я могу найти, объявляют столбец типа Точка вместо использования отдельных столбцов для координат, которые у меня есть. Поскольку я не могу изменить схему db, такой подход не будет работать для меня.

Итак, могу ли я использовать спящий режим для решения этой проблемы? Если да, как будет выглядеть запрос?

Решение:

Karthik Прасад четко и правильно описал, что пространственные и какие варианты у меня есть вообще. Поскольку я использую Oracle DB, у меня была еще одна опция: используйте пакет sdo_geom. Так, в конце вместо спящего запроса/критерии я использовал SQL запрос:

select * 
from SOMETHING 
where 
-- add box to decrease number of records 
-- where box is radius converted to degree by multiply on (1./69.) * 1.1 
:lon - :box < longitude and longitude < :lon + :box and 
:lat - :box < latitude and latitude < :lat + :box and 
sdo_geom.sdo_distance(
    sdo_geometry(2001, 4326, null, sdo_elem_info_array(1, 1, 1), sdo_ordinate_array(longitude, latitude)), 
    sdo_geometry(2001, 4326, null, sdo_elem_info_array(1, 1, 1), sdo_ordinate_array(:lon, :lat)), 
    1, 'unit=mile') < :radius 

ответ

0

Спящие Пространственный специфический действует на базы данных, имеющий тип геометрию с/без пространственных индексов. Только варианты, которые, как мне кажется, создают таблицу клонирования с другим столбцом, добавленным с точкой геометрии (или по вашей учетной записи), ваша база данных включена с пространственным расширением/модулем.

+0

Я провел некоторое время самостоятельно, чтобы понять, что «Hibernate Spatial специально работает с базой данных, имеющей тип Geometry с/без пространственных индексов». как ты сказал. Поскольку это был первый раз, когда я работал с пространством, мне было непонятно :( В результате я заканчиваю использование пакета Oracle sdo_geom – Alex

 Смежные вопросы

  • Нет связанных вопросов^_^