我很难找到如何使用表(不是映射表)上的连接来获取映射对象。
表:
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
答案 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