使用 QueryExpressionPlan 将提示传递给 nhibernate
Passing hint to nhibernate using QueryExpressionPlan
我正在使用 NHibernate 的 QueryExpressionPlan 将 Hibernate 查询语言转换为 SQL。
这是 C# 中的示例代码:
var hql = SELECT _table0.Id FROM MyTable1 _table0 WHERE 1=1 and _table0.Address.ZipCode LIKE '%58745%' ;
var sql = NHibernate.Engine.Query.QueryExpressionPlan
(new StringQueryExpression(hql), false, session.EnabledFilters, sessionFactory) ;
这是生成的 SQL。 NHibernate 无法将 INNER JOIN
添加到生成的 SQL 和 returns 逗号分隔格式的记录中,如下所示。
select myTable1.AssetId as col_0_0_ from MyTable1 myTable1, Address address1_
where myTable1.AddressId=address1_.AddressID
and 1=1 and (address1_.ZipCode like '%58745%');
我的查询是我应该将什么添加到 QueryExpression,以便它自动将内部连接添加到生成的 sql。
或者是 NHibernate 不会自己添加 INNER JOIN
,我需要以某种方式自己获取该信息并将其传递给 NHibernate。
是的,您可以使用 HQL
语句中的 inner join
在 NHibernate 代码中定义 join
。查看文档中的 15.3. Associations and joins
。
请记住,HQL
是 Hibernate Query Language
,它基于您的实体模型(映射 类)而不是您的关系模型(表格)。
记得在你的 hql 语句上绑定参数并在会话中设置它。例如:
var hql = "SELECT e.Id FROM MyEntity e
INNER JOIN e.Address a
WHERE a.ZipCode LIKE :zipCode";
var zipCodeData = "58745";
var result = session.CreateQuery(hql)
.SetParameter("zipCode", $"%{zipCodeData}%")
.List<int>();
我正在使用 NHibernate 的 QueryExpressionPlan 将 Hibernate 查询语言转换为 SQL。
这是 C# 中的示例代码:
var hql = SELECT _table0.Id FROM MyTable1 _table0 WHERE 1=1 and _table0.Address.ZipCode LIKE '%58745%' ;
var sql = NHibernate.Engine.Query.QueryExpressionPlan
(new StringQueryExpression(hql), false, session.EnabledFilters, sessionFactory) ;
这是生成的 SQL。 NHibernate 无法将 INNER JOIN
添加到生成的 SQL 和 returns 逗号分隔格式的记录中,如下所示。
select myTable1.AssetId as col_0_0_ from MyTable1 myTable1, Address address1_
where myTable1.AddressId=address1_.AddressID
and 1=1 and (address1_.ZipCode like '%58745%');
我的查询是我应该将什么添加到 QueryExpression,以便它自动将内部连接添加到生成的 sql。
或者是 NHibernate 不会自己添加 INNER JOIN
,我需要以某种方式自己获取该信息并将其传递给 NHibernate。
是的,您可以使用 HQL
语句中的 inner join
在 NHibernate 代码中定义 join
。查看文档中的 15.3. Associations and joins
。
请记住,HQL
是 Hibernate Query Language
,它基于您的实体模型(映射 类)而不是您的关系模型(表格)。
记得在你的 hql 语句上绑定参数并在会话中设置它。例如:
var hql = "SELECT e.Id FROM MyEntity e
INNER JOIN e.Address a
WHERE a.ZipCode LIKE :zipCode";
var zipCodeData = "58745";
var result = session.CreateQuery(hql)
.SetParameter("zipCode", $"%{zipCodeData}%")
.List<int>();