Сопоставление компонентов NHibernate (создание критериев) - PullRequest
0 голосов
/ 25 января 2011

Есть ли способ создать «псевдоним» для компонента?
У меня есть «Criteria Builder», который принимает строки в формате «Address.City» (или «User.Address.City»,…) и создает на его основе ICriteria (фильтры и сортировки).
Я использую компоненты для сопоставления класса «Адрес», чтобы он оставался в той же таблице, что и «Пользователь».

Исключение, которое я получаю:
NHibernate.QueryException не удалось разрешить свойство: Город: MyNamespace.User

Если я попытаюсь не создавать «псевдоним» для компонента Address, он будет работать просто отлично.
Однако, поскольку это построитель критериев, есть ли способ обнаружить, что «Адрес» является компонентом, и избежать критериев вызова. CreateAlias ​​(«Адрес»)? Любая работа вокруг?

Этот является тем же вопросом, что и мой, но решение для меня нецелесообразно (я не создаю критерии вручную для каждого запроса).

Любая помощь будет высоко ценится!

1 Ответ

1 голос
/ 25 января 2011

Вы не можете создать псевдоним для адреса, потому что адрес не является сопоставленной сущностью.Единственная разница между CreateAlias и CreateCriteria состоит в том, что первое возвращает исходные критерии, а второе возвращает новые подкритерии.Таким образом, единственные классы, для которых вы можете создать Критерии, это классы, которые были сопоставлены.Поскольку компоненты не являются отображаемыми классами, вы не можете создавать критерии вокруг них.

Единственное, что я могу предложить, - это иметь свой класс Address для реализации пустого интерфейса дескриптора, такого как IComponent, или пометить его как собственный ComponentAttribute.,Затем ваш CriteriaBuilder может проверить, есть ли у мета-данных класс, для которого он создает критерии, и проигнорировать его.

...