NHibernate의 기준 기능으로 작성한 쿼리가 있는데이를 최적화하려고합니다. 쿼리는 4 개의 테이블을 조인합니다. 쿼리가 작동하지만 생성 된 SQL은 반환하려는 정보가 아니라 4 개의 테이블에 대한 모든 열을 반환합니다. SetResultTransformer를 사용하여 반환 된 데이터를 개별적으로 모양 짓는 쿼리에 사용하지만 더 큰 sql이 서버에서 반환 될 때까지는 사용하지 않습니다.nhibernate 크로스 테이블 쿼리 최적화
여기
SELECT (all columns from all joined tables)
FROM INDIVIDUAL this_
inner join EXTERNAL_ID externalid1_
on this_.INDIVIDUAL_GUID = externalid1_.GENERIC_GUID
inner join EXTERNAL_ID_TYPE externalid2_
on externalid1_.EXTERNAL_ID_TYPE_GUID = externalid2_.EXTERNAL_ID_TYPE_GUID
inner join SYSTEM_SRC datasource3_
on externalid2_.SYSTEM_SRC_GUID = datasource3_.SYSTEM_SRC_GUID
WHERE externalid1_.EXTERNAL_ID_TEXT_1 = 96800 /* @p0 */
and externalid2_.EXTERNAL_ID_TYPE_CODE = 'PATIENT' /* @p1 */
and datasource3_.SYSTEM_SRC_CODE = 'TOUCHPOINT' /* @p2 */
난 단지 열 다시 개별 테이블에서 원하는 NHibernate에 기준
return session.CreateCriteria(typeof(Individual))
.CreateAlias("ExternalIdentifiers", "ExternalIdentifier")
.CreateAlias("ExternalIdentifier.ExternalIdentifierType", "ExternalIdentifierType")
.CreateAlias("ExternalIdentifierType.DataSource", "Datasource")
.Add(Restrictions.Eq("ExternalIdentifier.Text1", ExternalId))
.Add(Restrictions.Eq("ExternalIdentifierType.Code", ExternalIdType))
.Add(Restrictions.Eq("Datasource.Code", DataSourceCode))
.SetResultTransformer(new NHibernate.Transform.RootEntityResultTransformer());
그리고 (NHProfiler)에서 생성 된 SQL입니다입니다. 투영을 설정할 수는 있지만 개인 유형은 잃어 버립니다.
이 또한 DetachedCriteria로 다시 작성할 수 있습니다.
내 유일한 옵션입니까?