В моих отображениях NHibernate у меня есть два объекта - Listing и User. Один пользователь может иметь много списков, и (Свободно) сопоставления настраиваются так:
Листинг:
References<User>(h => h.User).ForeignKey("fk_UserID").Not.LazyLoad().Fetch.Join().Cascade.SaveUpdate();
Пользователь:
HasMany<Listing>(u => u.Listings);
Это отлично работает. Однако, когда я начал играть с QueryOver, я попытался:
DbSession.QueryOver<HaveListing>()
.Where(h => h.IsModerated == false)
.And(h => h.User.SpammedStatus == false)
Что не получается. Это, однако, работает:
DbSession.QueryOver<HaveListing>()
.Where(h => h.IsModerated == false)
.JoinQueryOver(h => h.User)
.Where(u => u.SpammedStatus == false)
Очевидно, что с последним можно работать, но я хотел убедиться, что я что-то не упустил - мои отношения определены в сопоставлениях, поэтому мне действительно нужно каждый раз указывать соединение для выполнения WHERE на пользователя? Было бы бесполезно включать эти объединения каждый раз, когда в этом нет необходимости.