Запросы NHibernate возвращают несколько копий целевых объектов - PullRequest
0 голосов
/ 05 октября 2009

В NHibernate отображаются два класса: Dragon и его подкласс FierceDragon, а несколько FierceDragon хранятся в таблице с именем Dragons. Когда я запускаю HQL-запрос, такой как from Dragon..., я получаю два объекта в строке: ожидаемый FierceDragon и обычный Dragon, который является копией FierceDragon (насколько это возможно; естественно, ему не хватает FierceDragon дополнительные Ferocity и TimeSinceLastMeal свойства). В частности, их идентификаторы идентичны. Когда я делаю from FierceDragon, я получаю только FierceDragon с, без дополнительных копий, но в целом это не сработает.

Почему это происходит и как я могу предотвратить это?

Ответы [ 2 ]

1 голос
/ 06 октября 2009

Если вы правильно создали отображение, это не должно вызывать проблем. Существует 3 различных способа сопоставления иерархии классов с БД с использованием NHibernate.

Проверьте это и это статья.

Вы можете отобразить как Dragon, так и FierceDragon на одну и ту же таблицу, но в этом случае ваша таблица должна иметь несколько столбцов, допускающих обнуление, чтобы иметь возможность хранить дополнительные свойства FierceDragon. Поскольку вы говорите об одной таблице, я полагаю, вы хотите использовать стратегию отображения «Таблица для иерархии классов»?

0 голосов
/ 06 октября 2009

Тайна разгадана; Я думал, что я только отображал FierceDragon, но нет, я тоже отображал Dragon, оба на стол Dragons. Не уверен, почему NH сделал именно эту вещь в этом случае, но очевидно, что исправление заключается в том, чтобы не отображать отдельные классы в одну таблицу. Или, если вы это сделаете, по крайней мере, дайте NH какой-то способ различения двух в БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...