【问题标题】:Perform Complex Queries in Hibernate在 Hibernate 中执行复杂查询
【发布时间】:2011-12-26 12:18:05
【问题描述】:

我使用 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

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    这个查询可以直译为 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,您将在 Urn 和 City 之间建立一个 ManyToOne 关联,在 Urn 和 State 之间建立另一个关联,在 Urn 和 Country 之间建立另一个关联。 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 1970-01-01
      • 2016-02-21
      相关资源
      最近更新 更多