7

私はこのテーブルを持っています:

Person -> PersonFavorites, PersonCompany
PersonCompany -> Company

NHibernate と QueryOver を使用して、次の選択を行う必要があります。

select * from Person 
  inner join PersonFavorites on Person.Id = PersonFavorites.PersonId 
  inner join PersonCompany on Person.Id = PersonCompany.PersonId 
  inner join Company on Company.Id = PersonCompany.CompanyId
where ...

誰かが私にサンプルをくれますか? どうすればそれを行うことができますか? - 私の問題は、複数のテーブル Person -> PersonCompany -> Company に参加する必要があることです。Join Person -> PersonCompany および Person -> PersonFavorites は問題ありませんが、次のステップは PersonCompany -> Company です。

4

1 に答える 1

18

マッピングは次のようになります。

エンティティ

    class Person
    {
        ICollection<PersonFavorites> favorites;
        ICollection<PersonCompany> companies;
    }
    
    class PersonFavorite
    {
        Person person;
        Favorite favorite;
    }
    
    class PersonCompany
    {
        Person person;
        Company company;
    }

クエリ

    Person personAlias = null;
    PersonFavorite personFavoriteAlias = null;
    PersonCompany personCompanyAlias  = null;
    ICollection<PersonCompany> personCompaniesAlias = null;
    Company companyAlias = null;
    Favorite favoriteAlias = null;
    
    var query = Session.QueryOver<Person>(() => personAlias)
        .JoinAlias(() => personAlias.Favorites, () => personFavoriteAlias)
        .JoinAlias(() => personAlias.Companies, () => personCompanyAlias)
        // OR: .JoinAlias(() => personAlias.Companies, () => personCompaniesAlias)
        .JoinAlias(() => personfavoriteAlias.Favourite, () => favoriteAlias)
        .JoinAlias(() => personCompanyAlias.Company, () => companyAlias)
        .Where(() => personCompanyAlias.Person.Name == ...)
        // OR: .Where(() => personCompaniesAlias.Count() == ...)
        // ...
        ;
于 2012-09-29T12:18:06.470 に答える