【发布时间】:2011-04-04 15:22:26
【问题描述】:
我有以下域映射:
Person
------
int PersonId
IList<PersonDetails> Details;
PersonDetails
-------------
Person Owner (mapped by using the FK field, PersonId)
string Name
string Address
DateTime UpdateDate
翻译成类似的表结构:
Person
------
PersonId (int)
Birthday (date)
PersonDetails
-------------
PersonId (FK, integer)
Name (string)
Address (string)
UpdateDate (date)
如何使用 QueryOver 重新创建以下 SQL 查询?
SELECT *
FROM Person p INNER JOIN Details d ON p.PersonId = d.PersonId
WHERE d.UpdateDate = (SELECT MAX(UpdateDate)
FROM PersonDetails
WHERE PersonId = p.PersonId);
即,为每个人选择最新的 PersonDetails。 我见过一些例子,但它们都没有与使用聚合值的相关子查询相关......
谢谢, 哈雷尔
【问题讨论】:
-
对不起,您的表关系是 OneToMany,对吗?
-
哦,对不起,我忘记了这个细节 - 映射确实是一对多的关系,因为 Person 可以“拥有”许多 PersonDetails 对象。
-
很抱歉,我还没有为您的查询找到解决方案,但是...如果您使用 Fluent NHibernate 将您的表映射到您的模型,并且您对 Person 和 PersonDetails 的查询总是使用 SELECT MAX(UpdateDate) 也许我有一个想法:-)
标签: nhibernate queryover