2012-06-06 70 views
0

我得到了一个与n个网络域帐户相关的客户端实体。一对多的NHibernate查询

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] 

这应该是一个简单的任务,我猜? 这里有什么可能是错的?

预先感谢您!

回答

0

固定它:

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

你应该纪念这个作为一个公认的答案 –