使用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 ……