我可以映射到这样的查询:
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"/>
答案 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
这会产生与您相似的查询。您在第一列中获得了一个人,在第二列中获得了一个帐户数。