빠른 NHibernate에 문제 :NHibernate 객체를 수화하지 않고 Criteria 내부 조인을 만드는 방법?
내가 가진 SQL 테이블 :
Item { Id, Name }
ItemRange { Id, Name }
ItemHasItemRange { Id, ItemId, ItemRangeId }
매핑은 간단합니다, 그래서 나는 항목 클래스가 ItemHasItemRanges 수집 게으른로 매핑하고있다, 항목 ID 및 ItemRangeId 외국 키입니다 붙여 넣을 수 없습니다 가방.
특히 ItemRange에있는 모든 항목을 원하지만 연관된 ItemRangeObjects를 검색하지 않으려 고합니다. 범위를 좁히려면 내부 조인을 수행하고 싶습니다.
나는 그런 식으로 작업을 수행 할 때 : 그것은 잘 작동하지만 모든 ItemHasItemRange 개체는 Item.ItemHasItemRanges에뿐만 아니라 인출되어
c.CreateCriteria("Item", "i")
.CreateAlias("ItemHasItemRanges", "ihpr", JoinType.InnerJoin)
.Add(Restrictions.Eq("ihpr.ItemRange.Id", I18nHelper.CurrentItemRange.Id));
(게으른로 매핑됩니다) 컬렉션
Item.ItemHasItemRanges를 가져오고 싶지 않습니다. 시간이 걸리기 때문입니다. 난 그냥 결과 집합을 제한하기 위해 내부 조인 싶어요. NHibernate에서 가능합니까?
'CreateAlias' 대신'CreateCriteria'를 사용하면 어떻게됩니까? –
IMO, 예상대로 작동해야합니다. 명시 적으로 ('SetFetchMode'를 사용하여) 쿼리에서 FetchMode를 설정하려고 할 수 있습니다. –
나는'.SetFetchMode ("ItemHasItemRanges", FetchMode.Lazy);와 함께 시도했다 - 생성 된 쿼리는 동일하다. 'CreateCriteria'와 같은 것 - CreateCriteria는 CreateAlias와 다른 점은 우리가 시작한 기준 대신 새로운 기준에 뿌리를 둔 객체를 반환하는 것뿐입니다. 모든 필드는 여전히 선택 목록에 있습니다. 심지어 게으르도록해야합니다. – Adam