2010-04-06 4 views
1

NHibernate에, 난 내 매핑 또는 쿼리

public class StaffMap : ClassMap<Staff> 
{ 
    public StaffMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Name); 
     References(x => x.Manager).Column("ManagerId"); 
     HasMany(x => x.Team).KeyColumn("ManagerId").Inverse(); 
    } 
} 

이제이 간단한 예제

직원 클래스

public class Staff 
{ 
    public Staff() 
    { 
     Team = new List<Staff>(); 
    } 

    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual IList<Staff> Team { get; set; } 
    public virtual Staff Manager { get; set; } 
} 

유창 매핑의 다른 인스턴스를 참조하는 직원 수업을 개선 할 수 있습니다 I 모든 직원을로드하고 관리자와 팀 구성원을 열렬히로드하는 쿼리를 실행하려고합니다. 이것은 SQL, 이것은해야 2 team2_.ManagerId 및 2

질문은
SELECT 
this_.Id as Id0_1_, 
this_.Name as Name0_1_, 
this_.ManagerId as ManagerId0_1_, 
team2_.ManagerId as ManagerId3_, 
team2_.Id as Id3_, 
team2_.Id as Id0_0_, 
team2_.Name as Name0_0_, 
team2_.ManagerId as ManagerId0_0_ 
FROM [SelfRef].[dbo].[Staff] 
this_ left outer join 
[SelfRef].[dbo].[Staff] team2_ 
on this_.Id=team2_.ManagerId 

을 team2_.Id, 중복 된 열이 (내가 원하는 않습니다)하지만 내가

IList<Staff> resutls = 
    session.CreateCriteria<Staff>() 
    .SetFetchMode("Team", FetchMode.Eager) 
    .SetResultTransformer(Transformers.DistinctRootEntity) 
    .List<Staff>(); 

해낸 것입니다 사고?

내가 쿼리 나 맵에서 뭔가 잘못 했습니까?

또는 사용중인 HHib의 기능 (버전 2.1.0.4000)은 무엇입니까? 사전에

많은 감사

답변

1

당신이 외래 키의 두 배를 사용하기 때문에 네, 정상입니다. 그것은 당신의 DBMS에 의해 최적화 될 것입니다. 성능에 영향을주지 않으므로 일반적으로 생성 된 쿼리의 SELECT 부분을 무시합니다.