Выполнять сложные запросы в Hibernate - PullRequest
0 голосов
/ 26 декабря 2011

Я выполнил запрос, используя Hibernate, который ссылается на одну таблицу с предложением where.

Я выбираю следующий запрос в sql:

SELECT URN.ID,
  URN.USERNAME,
  (SELECT NAME FROM CITY WHERE ID=URN.CITY_ID
  ) AS CITY ,
  (SELECT NAME FROM STATE WHERE ID=URN.STATE_ID)  AS STATE,
  (SELECT NAME FROM COUNTRY WHERE ID = URN.COUNTRY_ID) AS COUNTRY
FROM USERREGISTRATION_NEW URN

URN.CITY_ID, URN.STATE_ID, URN.COUNTRY_ID содержит числовые значения.

Город, штат, название страны извлекаются из соответствующей таблицы при передаче числового идентификатора.

Итак, как мне написать этот запрос в Hibernate?

Кроме того, я не понимаю учебники «многие к одному» и т. Д.?

Я взял ссылку от Vaannila

1 Ответ

2 голосов
/ 26 декабря 2011

Этот запрос может быть переведен буквально на HQL. Просто измените имена таблиц на имена классов сущностей, а имена столбцов на имена свойств сущностей, и у вас будет HQL-запрос.

Но этот запрос должен быть написан с объединениями. В SQL это будет

select urn.id, urn.username, city.name as city, state.name as state, country.name as country
from USERREGISTRATION_NEW urn
inner join city on urn.city_id = city.id
inner join state on urn.state_id = state.id
inner join country on urn.country_id = country.id

И, используя Hibernate, у вас будет связь ManyToOne между Урной и Городом, другая между Урной и Штатом и еще одна между Урной и Страной. Тогда HQL будет:

select urn.id, urn.userName, cityEntity.name as city, stateEntity.name as state, countryEntity.name as country
from Urn urn
inner join urn.city as cityEntity
inner join urn.state as stateEntity
inner join urn.country as countryEntity

или даже проще:

select urn.id, urn.userName, urn.city.name as city urn.state.name as state, urn.country.name as country
from Urn urn
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...