基本上,我有一个现有的数据库,我试图用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相同。
答案 0 :(得分:1)
如果我们需要映射一些复杂的SELECT语句(如上所述),我们
1)不想为那个创建视图 2)可以接受解决方案只读(可以预期,我知道)
我们可以使用NHibernate内置的(但没有那么深入记录和呈现)功能<subselect>
。点击此处了解更多详情:
小片段示例
<class name="MyEntity"... >
<subselect>
SELECT ...
FROM ...
</subselect>
...