【发布时间】:2012-03-01 03:38:06
【问题描述】:
我有一个跨越 7 个表的复杂查询,想知道如何在 Hibernate 中实现它。
我目前的尝试是使用 session.createSQLQuery 进行查询,并将结果映射到特定实体。
我不知道该怎么做,因为过去我只使用一个表到一个实体。我需要在哪里指定我想使用可以跨越多个表的复杂查询?那只在我的代码中吗?我的 hbm.xml 文件?除了我目前的尝试之外,我想不出其他任何东西。
这是我的查询示例:
String stringQuery =
"select WI.Customer_Id, CU.Card, CU.Code, "+
"PI.Identity_Card, PI.Name, PI.Surname, PI.Gender, "+
"AD.Zip, AD.Geo_Lat, AD.Geo_Long, "+
"CO.City_Geo_Level, "+
"CU.Address_id, CA.Name, "+
"CU.Category_Id, "+
"CU.Status, "+
"Sum(MO.Charged_Points) as Charged_Points, "+
"Sum(MO.Total_Money) as Total_Money, "+
"Count(MO.id) as AmountTransWinner "+
"from Promotions_Winner WI "+
"join Customers CU "+
"on WI.Customer_id = CU.id "+
"join Personal_Info PI "+
"on CU.Personal_Info_Id = PI.id "+
"join Address AD "+
"on CU.Address_Id = AD.id "+
"join Countries CO "+
"on AD.country_id = CO.id "+
"join Campaigns CA "+
"on CU.Campaign_Id = CA.id "+
"join Movements MO "+
"on WI.Movement_Id = MO.id "+
"where WI.Promotion_Id = :pPromotionID "+
"group by "+
"WI.Customer_Id, CU.Card, CU.Fidely_Code, "+
"PI.Identity_Card, PI.Name, PI.Surname, PI.Gender, "+
"AD.Zip, AD.Geo_Lat, AD.Geo_Long, "+
"CO.City_Geo_Level, "+
"CU.Address_id, CA.Name, "+
"CU.Category_Id, "+
"CU.Status";
【问题讨论】: