2009-09-10 86 views
0

试图做一个更复杂的查询,并认为HQL会更好的工作。使用nHibernate。什么是此SQL的HQL相当于

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以及(?),但不知道如何真正如何加载我的对象。

回答

1

这取决于你的实体是什么以及你关心的主要对象是什么。你似乎把他们全部拉下来,而不是只有一个实体。我将假设组是这个例子中的实体

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 '?%' 

这应该让你开始。但由于不了解你的结构,我正在黑暗中拍摄。

+0

对不起,你是正确的,我想要得到一个组的集合。 – rball 2009-09-10 15:29:22

+0

我觉得你非常接近,我会给它一个镜头,并回来与你。感谢你的回答。 – rball 2009-09-10 15:30:19

+0

让我到我需要的地方。我最终使用的是:var groups = repository.SimpleQuery (“来自Group as g join fetch g.Users as u join g.Activity as a where u.Id =?and a.Lineage like?”,currentUser.Id ,string.Format(“{0}%”,lineage)); – rball 2009-09-11 04:26:50

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 '?%' 
+0

我有一个[HasAndBelongsToMany(typeof(Group),Table =“User2Group”,ColumnKey =“UserId”,ColumnRef =“GroupId”)] \t \t公共虚拟IList 群组和类似从用户到多对多。我最初是从这样的事情开始的,但我最终的结果需要成为一个群体的集合。 – rball 2009-09-11 04:13:05