使用nhibernate和ICriteria连接两个不相关的视图表
我有两个基于两个视图的实体。 映射看起来像这样:
完全A:
实体B:
实体A基于表视图,该视图是用于搜索优化的更复杂的表结构的展平视图。 现在,我希望能够通过使用NHibernate和Criteria-API从实体A中获取Id在实体B中 “InvoiceId”列中的所有行,以获取实体B中“ResourceId”的特定值。 这两个表都是视图,它们没有声明的关系。 我在C#中尝试了以下代码,但它不起作用:
var criteria = _session.CreateCriteria(typeof(SearchView)); criteria.CreateAlias("SearchInvoiceResourceLookUpView", "srf",JoinType.InnerJoin) .Add(Restrictions.EqProperty("sfr.InvoiceId", "Id")) .Add(Restrictions.Eq("sfr.ResourceId", invoiceResId));
用于此目的的原始SQL将是:
SELECT * FROM SearchView JOIN SearchInvoiceResourceLookUpView srf on srf.InvoiceId = Id WHERE srf.ResourceId = '[Inser resource id here]'
我该如何解决这个问题?
还有另一种更好的方法吗?
在我们的实体之间没有显式映射的情况下,我们只能使用HQL。
- 14.2。 from子句 (小引用和片段)
可能会出现多个类,从而产生笛卡尔积或“交叉”连接。
from Formula, Parameter from Formula as form, Parameter as param
所以在上面的例子中我们会有这样的HQL:
FROM SearchView AS sv, SearchInvoiceResourceLookUpView AS srf WHERE srf.InvoiceId = sv.Id AND srf.ResourceId = '[Inser resource id here]'
还应该使用一些SELECT,也许是结果变换器的DTO ……