NHibernate:使用表上的连接使用HQL获取对象模型

时间:2011-04-04 11:29:19

标签: join nhibernate hql

我很难找到如何使用表(不是映射表)上的连接来获取映射对象。

表:

DataForm: (Id, AliasName (FK), ...)
Customer: (Id, ...)
CustomerAliases: (PK AliasName, CustomerId (FK))

因此别名对每个客户都是唯一的,而客户可能有很多别名。

代码:

DataForm.Customer - this is what I need

那么如何在getter中编写HQL? 由于CustomerAliases表只是一个别名列表,因此我没有将其映射到类,而是通过Customer访问。如何使用AliasName获取客户? 如果这是正常的SQL我会这样做:

SELECT * From Customer c
INNER JOIN CustomerAliases ca ON ca.AliasName = 'AliasNameProvided'
WHERE ca.CustomerId = c.Id

1 个答案:

答案 0 :(得分:2)

HQL只能用于映射的类。当您离开映射区域时,您需要使用与您的问题中的SQL完全相同的SQL。

我会映射它:

class Customer
{
  IList<string> AliasNames { get; private set; }
}

映射:

<class name="Customer">
  <!-- ..... -->
  <bag name="AliaseNames" table="CustomerAliases">
    <key column="CustomerId"/>
    <element column="AliasName"/>
  </bag>
</class>

查询:

from Customer c join c.AliasNames n
where n = :alias