質問

私は、ソーシャルネットワーキングサイトの基準のクエリを持っています。 Personオブジェクトは、友人(また、人物オブジェクト)のコレクションを持っています。クエリは、最初のNの友人をつかむ、私はまた、熱心な負荷に関連したオブジェクトMainProfileImageと、その後の関連するオブジェクトMediumThumbnailを望んでます。

私は簡単に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とMediumThumbnailデータを取得したいの関連から明らかではありません。あなたの条件文でそれを使用しているとして、あなたは、その友人あなたがfriendsAliasを使用しているとして、あなたが取得しているメインのPersonオブジェクトから来てデータを求めています。私は、私はあなたからのデータを関連付けることを意味するところ、これがあると信じて代わりpersonAliasを使用するように変更されています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top