其中一个字段是count(*)NHibernate

时间:2011-02-13 15:14:42

标签: nhibernate nhibernate-mapping

我可以映射到这样的查询:

select id,name,address,(select count(*) from account where record_id=id ) as counter
from data where id = :id

目前,我正在使用本机SQL。

class person
{
    public virtual long Id{get;set;}
    public virtual string Name{get;set;}
    public virtual string Address{get;set;}
    public virtual long Counter{get;set;}
}

映射:

<property name="Counter" formula="(select count(*) from account where record_id=id )"      type="long"/>

2 个答案:

答案 0 :(得分:5)

是的,您应该使用formula

您的映射可能如下所示:

<property name="CountOfAccounts"
    formula="(select count(*) from account where account.id = id)"/>

答案 1 :(得分:3)

这取决于您要使用的业务类。你可以拥有这些课程;

class Person
{
  int Id { get; private set; }
  string Name { get; set; }
  string Address { get; set; }
  IList<Account> Accounts { get; private set; } 
}

class Account
{
  // ...
}

然后将其“正常”映射为一对多。不要忘记使用延迟加载。你可以把它变成双向的。

您可以创建一个优化查询,以防止加载帐户只计算它们:

select 
  p,
  size(p.Accounts)
from
  Person p
where 
  p.id = :id

这会产生与您相似的查询。您在第一列中获得了一个人,在第二列中获得了一个帐户数。