如何将对象映射到NHibernate中的聚合视图?

时间:2015-10-14 17:11:02

标签: sql hibernate nhibernate nhibernate-mapping

基本上,我有一个现有的数据库,我试图用NHibernate映射。

这是一个简单的例子:

CREATE TEMPORARY TABLE exmplTable (
    id INT,
    changeNumber INT,
    name VARCHAR(255),
    address VARCHAR(255)   
)

可能包含以下记录:

1  0 'John Doe' '123 Fake St'
1  1 'John Doe' '145 Another St' -- John moved
1  2 'John Doe' '42 Clark St'    -- John moved again

我只关心单个id的最新信息。如果我要手动映射这些,我会查看:

SELECT id, name, address
FROM exmplTable E
INNER JOIN 
(
    SELECT id, MAX(changeNumber) cn
    FROM exmplTable
    GROUP BY id
) E2
ON E.id = E2.id AND E.changeNumber = E2.cn

然后以这种方式通过id获取记录:

SELECT * FROM viewname WHERE id = @id

那么:

如果没有在数据库中创建视图,并且没有通过手动执行聚合查询来检索记录的DAL接口,是否可以将NHibernate映射到这种关系?

请注意,虽然我使用的是NHibernate,但Hibernate xml的工作方式与AFAIK相同。

1 个答案:

答案 0 :(得分:1)

如果我们需要映射一些复杂的SELECT语句(如上所述),我们

1)不想为那个创建视图 2)可以接受解决方案只读(可以预期,我知道)

我们可以使用NHibernate内置的(但没有那么深入记录和呈现)功能<subselect>。点击此处了解更多详情:

NHibernate Criteria: Subquery After 'From' Clause

小片段示例

<class name="MyEntity"... >
   <subselect>
    SELECT ...
    FROM ...
   </subselect>
   ...