문제

소셜 네트워킹 사이트에 대한 기준 쿼리가 있습니다. 사람 객체에는 친구 모음이 있습니다 (또한 사람 대상). 쿼리는 첫 번째 N 친구를 사로 잡지만 관련 객체 MainProfileImage를 열망하고 후속 객체 Mediumnail을 열망하고 싶습니다.

HQL에서 쉽게 할 수 있습니다.

select friends from Person person inner join person.Friends friends inner join fetch friends.MainProfileImage image inner join fetch image.MediumThumbnail where person = :person1 order by friends.LatestLogin desc

내 기준 노력은 다음과 같습니다. 어떤 이유로 든 이것은 아무것도 돌려주지 않습니다!

public static IList<Person> GetFriends(Person person, int count)
{
    Person personAlias = null;
    Person friendAlias = null;

    ICriteria criteria = NHibernateSessionManager.Instance.GetSession()
        .CreateCriteria(typeof (Person), () => personAlias)
        .CreateCriteria(() => personAlias.Friends, () => friendAlias, JoinType.LeftOuterJoin)
        .CreateCriteria(() => friendAlias.MainProfileImage, JoinType.InnerJoin)
        .CreateCriteria(() => friendAlias.MainProfileImage.MediumThumbnail, JoinType.InnerJoin)
        .AddOrder(() => personAlias.LatestLogin, Order.Desc)
        .Add<Person>(p => p.ID == person.ID)
        .SetMaxResults(count);
    return criteria.List<Person>();
}
도움이 되었습니까?

해결책

나는 당신의 진술의 순서로 인해 쿼리가 당신이 얻는 것이 바람직하지 않은 SQL을 생성하게한다고 생각합니다 (따라서 결과는 없음). 다음은 다음과 같습니다.

public static IList<Person> GetFriends(Person person, int count)
{
    Person personAlias = null;
    Person friendAlias = null;

    ICriteria criteria = NHibernateSessionManager.Instance.GetSession()
        .CreateCriteria(typeof (Person), () => personAlias)
        .CreateCriteria(() => personAlias.Friends, () => friendAlias, JoinType.LeftOuterJoin)
        .Add<Person>(p => p.ID == person.ID)
        .CreateCriteria(() => personAlias.MainProfileImage, JoinType.InnerJoin)
        .CreateCriteria(() => personAlias.MainProfileImage.MediumThumbnail, JoinType.InnerJoin)
        .AddOrder(() => personAlias.LatestLogin, Order.Desc)
        .SetMaxResults(count);
    return criteria.List<Person>();
}

또한 귀하의 설명에 따르면 MainProfileimage 및 Medium Thumbnail 데이터를 얻으려는 연관성이 명확하지 않습니다. 당신이 당신의 기준 명령문에서 그것을 사용하는 동안 당신은 당신이 당신이 사용하는 것처럼 친구들이 받고있는 주인공 객체에서 나오도록 데이터를 요청하고 있습니다. friendsAlias. 나는 그것을 사용하도록 변경했다 personAlias 대신에 이것이 당신이 데이터를 연결하려는 의미라고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top