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