QueryException: дубликат пути ассоциации - PullRequest
0 голосов
/ 16 ноября 2011

У меня есть такое требование:

Требование 1)

select * from BigTable

1) Where BigTable.User.FullName = XYZ
2) Where BigTable.Network.Name = XYZ

Пользователь и Сеть - это отдельные таблицы, связанные FK.Есть 2 типа опций, как указано выше.На самом деле это используется для поиска.

Требование 2)

1) Order By BigTable.User.FullName ASC/DESC
2) Order By BigTable.Network.Name ASC/DESC

После того, как поиск загружен, его следует упорядочить по любой из опций, исходя из того, с чем пользователь предпочитает сортировать данные.

Я хочу реализовать более усовершенствованный код, в котором мне не нужно дублировать многие многочисленные коды JoinQueryOver только для того, чтобы справляться со всеми видами сценариев, которые загружают объединенную сущность, являющуюся текущей сущностью;поэтому я прибегаю к использованию JoinAlias, чтобы у меня была стандартизированная реализация для всего выполнения кода.Обратите внимание, что я не хочу полагаться на HQL, если это вообще возможно.

По какой-то причине я не могу действительно перевести свою логику в кодирование NHibernate.См. Ниже:

var Query = session.QueryOver<BigTable>();

User funny = null;

Query.JoinAlias(x => x.User, () => funny).Where(() => funny.Full_Name.IsInsensitiveLike("%" + SearchTextFilter + "%"));

return Query.OrderByAlias(() => funny.Full_Name).Desc
                                .Skip(skip)
                                .Take(take)
                                .List<MasterLicensee>();

Я получаю эту ошибку: [QueryException: дубликат пути ассоциации: Пользователь]

Есть идеи, что я набрал неправильно или что-то?:)

РЕДАКТИРОВАТЬ:

Моя идея состоит в том, чтобы разделить их для многих возможных сценариев.

Значение, например:

Требование 1) Поиск по полному имени пользователя.

Затем

Требование 2) Сортировка по имени сети.

Только исходя из этих 2 требований, мы можем иметь возможность:

  • Требование 1) Опция 1 Требование 2) Опция 1
  • Требование 1) Опция 1 Требование 2) Опция 2 <<< это проблемы </li>
  • Требование 1) Вариант 2 Требование 2) Вариант 1
  • Требование 1) Вариант 2 Требование 2) Вариант 2 <<< это проблемы </li>

, с которыми будет утомительно и некрасиво кодировать.Поэтому я думаю разделить их на сегменты.

Смеси с различными необходимыми объединениями, например:

select * from BigTable Where BigTable.User.FullName = XYZ Order By BigTable.Network.Name ASC/DESC

Как я могу получить это в NHibernate Query ??Пожалуйста, помогите

1 Ответ

0 голосов
/ 18 ноября 2011

Отвечая на ваш главный вопрос, я считаю, что ваша проблема в том, что, поскольку вы не цепляетесь, как предполагает ГертАрнольд, вы фактически создаете один и тот же псевдоним дважды.

Команды JoinAlias и OrderByAlias отображаются на команду Criteria с CreateAlias(), что означает, что вы будете указывать один и тот же псевдоним дважды. Таким образом, ваша проблема обсуждается здесь .

Итак, попробуйте объединить команды так, чтобы вы указали псевдоним только один раз, и посмотрите, решит ли это проблему.

...