2011-12-26 57 views
0

我已经使用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包含数值。

城市,州,国家名称从相应的表上检索传递数字ID。

那么,我该如何在Hibernate中编写这个查询呢?

此外,我不明白多对一,等教程?

我采取了参考从Vaannila

回答

2

这种查询可以从字面上翻译成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,你将有瓮城和市,另一个悫骨灰盒州和瓮城和国家之间的另一个之间的多对一关系。然后,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