使用nhibernate和ICriteria连接两个不相关的视图表
本文关键字:两个 不相关 视图 nhibernate ICriteria 连接 使用 | 更新日期: 2023-09-27 18:26:16
我有两个基于两个视图的实体。映射如下:
Entiy A:
<class name="SearchView" table="SearchView" dynamic-update="true" mutable="false" schema-action="none">
<id name="Id" type="Guid" column="Id" />
<property name="Id" column="Id" type="Guid" />
<property name="Expires" column="Expires" type="DateTime" />
<property name="VerificationNumber" column="VerificationNumber" type="Int32" />
<property name="InvoiceNo" column="InvoiceNo" type="Int32" length="50" />
<property name="Status" column="FakturaStatus" type="Int32" />
</class>
实体B:
<class name="SearchInvoiceResourceLookUpView" table="SearchInvoiceResourceLookUpView" dynamic-update="true" mutable="false" schema-action="none">
<id name="Id" type="Guid" column="Id" />
<property name="InvoiceId" column="InvoiceId" type="Guid" />
<property name="ResourceId" column="ResourceId" type="Guid" />
</class>
实体A基于一个表视图,该视图是更复杂的表结构的平面视图,用于搜索优化。现在,我希望能够使用NHibernate和Criteria-API从实体A中获取所有行,其中Id位于主体B的"InvoiceId"列中,用于对象B 用于此目的的原始SQL是: 如何解决此问题 还有其他更好的方法吗 var criteria = _session.CreateCriteria(typeof(SearchView));
criteria.CreateAlias("SearchInvoiceResourceLookUpView", "srf",JoinType.InnerJoin)
.Add(Restrictions.EqProperty("sfr.InvoiceId", "Id"))
.Add(Restrictions.Eq("sfr.ResourceId", invoiceResId));
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与Result Transformer