Коллекции NHibernate и движущиеся объекты - PullRequest
6 голосов
/ 27 апреля 2009

Я только что столкнулся с серьезной проблемой для меня с NHibernate. У меня есть 2 объекта, каждый с набором вещей. Мне нужно переместить одну вещь из коллекции из объекта A в коллекцию объекта B. Я получаю ошибку об удаленном объекте, потому что, я полагаю, NHibernate пытается удалить вещь из коллекции объекта A, когда ему нужно сохранить ее для объекта Б. С точки зрения БД, это просто вопрос обновления свойства «parent» для нового объекта (Объект B). Но с коллекциями я не совсем уверен, что делать с ...

Существует ли хорошо известная процедура перемещения объектов из одной коллекции в другую в NHibernate?

Заранее спасибо за любую помощь.

С уважением,

Эрик.

Ответы [ 2 ]

3 голосов
/ 02 мая 2009

Я предполагаю, что вы используете Cascade в отображении для класса, представленного объектами A и B, т.е. A и B являются экземплярами некоторого класса X, а отображение X содержит атрибут каскада в коллекции, содержащей объект для передачи.

Учитывая это предположение, это может помочь.

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

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

Есть два выхода, которые я могу придумать. Лучшее из двух, вероятно, состоит в том, чтобы рассматривать объект переноса как независимый объект, который сам по себе сохраняется в БД (т. Е. Не использует Каскадирование при отображении объектов с коллекцией). Концептуально это имеет смысл, потому что если вы можете перенести его из одной коллекции в другую, это подразумевает, что каким-то образом он не зависит от двух объектов, имеющих коллекции. Это значит, что вы можете оказаться с сиротами.

Если вы хотите придерживаться использования каскада в сопоставлениях, то вам нужно будет удалить из объекта А в транзакции, отличной от операции добавления в объект Б. Я подозреваю, что это не то, что вы хотите сделать.

0 голосов
/ 28 апреля 2009

Вы пробовали составлять карту, используя

Каскад = "все-удалить-сирота"

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