什么是此SQL的HQL等价物

时间:2009-09-10 14:35:18

标签: nhibernate hql

尝试做一些更复杂的查询,并认为HQL会更好地完成工作。使用nHibernate。

SELECT * FROM [Group] g 
  INNER JOIN [User2Group] ug on g.Id = ug.GroupId
  INNER JOIN [User] u ON u.Id = ug.UserId
  INNER JOIN Activity a on g.ActivityId = a.Id
WHERE u.Id = ? AND a.Lineage LIKE '?%'

我想我也可以只使用SQL(?),但不确定如何以这种方式加载我的对象。

2 个答案:

答案 0 :(得分:1)

这取决于您的实体是什么以及您关心的主要对象是什么。你似乎把它们全部拉出来而不仅仅是一个实体。我将假设Group是此示例中的实体

from MyApp.Entities.Group as g
join fetch g.Users as u
join fetch g.Activity as a
where u.Id = :userId and a.Lineage like '?%'

这应该让你开始。但是在不知道你的结构的情况下,我正在黑暗中拍摄。

答案 1 :(得分:0)

如果你有多对多连接(User2Group表),你应该从它开始并在这个表上进行所有连接。如果您有正确的映射,下面的查询就像魅力一样。

from User2Group as ug
join ug.User as u
join ug.Group as g
where u.Id = :userId and g.Activity.Lineage like '?%'