NHibernate查询一对多

时间:2012-06-06 08:06:37

标签: c# nhibernate hql

我有一个与n个网络域帐户相关的客户端实体。

Client:
IList<DomainInfo> domainInfo;

DomainInfo:
string domain;
string username;

Client.hbm.xml的映射包含:

<bag name="domainInfo" cascade="all" lazy="false">
  <key column="client"/>
  <one-to-many class="Kardex.CMS.Domain.Model.Client.DomainInfo"/>
</bag>

DomainInfo.hbm.xml的mappinf不包含与客户端的多对一映射。

当我将带有域信息元素的客户端实体插入数据库时​​,一切正常。每个域信息条目都包含映射到正确客户端的“客户端”列。

现在我想查询具有特定网络域和用户名的用户:

clients = session.CreateQuery("from Client c where c.domainInfo.username = :winuser and c.domainInfo.domain = :windomain")
    .SetParameter("winuser", "john_doe")
    .SetParameter("windomain", "domain123")
    .List<Client>();

但我得到一个例外:

illegal attempt to dereference collection [client0_.id.domainInfo] with element 
property reference [username]

我也尝试过INNER JOIN,但后来我又得到了另一个例外:

from Client c inner join c.domainInfo d where d.username = :winuser and d.domain = :windomain

引发

Could not execute query[SQL: SQL not available]

我猜这应该是一项简单的任务? 这可能有什么问题?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

修正了它:

select c from Client c left join c.domainInfo d where d.username = :winuser and d.domain = :windomain