【问题标题】:How to do you map an object to an aggregated view in NHibernate?如何将对象映射到 NHibernate 中的聚合视图?
【发布时间】:2015-10-14 17:11:01
【问题描述】:

基本上,我有一个正在尝试使用 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 相同。

【问题讨论】:

    标签: sql hibernate nhibernate nhibernate-mapping


    【解决方案1】:

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

    1) 不想为此创建视图
    2) 可以接受该解决方案将是只读的(我知道)

    我们可以使用 NHibernate 内置 (但没有如此深入的文档和介绍) 功能 <subselect>。在此处查看更多详细信息:

    NHibernate Criteria: Subquery After 'From' Clause

    小sn-p例子

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多