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

Join NHibernate:使用表上的联接使用HQL获取对象模型,join,nhibernate,hql,Join,Nhibernate,Hql,我很难弄清楚如何使用表(非映射表)上的联接获取映射对象 表: DataForm: (Id, AliasName (FK), ...) Customer: (Id, ...) CustomerAliases: (PK AliasName, CustomerId (FK)) 因此,每个客户的别名都是唯一的,客户可能有许多别名 代码: 那么如何在getter中编写HQL呢? 因为CustomerAlias表只是一个别名列表,所以我没有将它映射到类,而是通过Customer访问它。如何使用别名获取客户

我很难弄清楚如何使用表(非映射表)上的联接获取映射对象

表:

DataForm: (Id, AliasName (FK), ...)
Customer: (Id, ...)
CustomerAliases: (PK AliasName, CustomerId (FK))
因此,每个客户的别名都是唯一的,客户可能有许多别名

代码:

那么如何在getter中编写HQL呢? 因为CustomerAlias表只是一个别名列表,所以我没有将它映射到类,而是通过Customer访问它。如何使用别名获取客户? 如果是普通SQL,我只会执行以下操作:

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

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

我会绘制它:

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

你所说的HSQL是什么意思?为什么不映射别名呢?所以我不需要使用带有映射的CustomerAlias类来工作?那正是我想要的。。我试试。不,这只是一个字符串列表。不确定将别名作为主键是否那么容易。非常感谢,它很有效!实际上,我已经映射了一个列表,但我不知道您可以加入对象
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