2009-04-27 3 views
6

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

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

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

С уважением,

Eric.

+0

Как вы нарисовали коллекции? –

ответ

3

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

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

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

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

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

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

+0

Роб, спасибо за ваш ответ. Мы закончили тем, что отказались от NHibernate всего несколько дней спустя, и по некоторым причинам я не помню, чтобы уведомления об ответах были в моей теме. В любом случае, спасибо за вашу помощь. –

0

Вы пробовали отображение с помощью

каскада = «всего-удалить-сирота»

Смежные вопросы