Другой объект с таким же значением идентификатора уже был связан с сеансом: XXX объекта

У нас есть проект ASP.NET MVC 3 C#, на котором выполняются NHibernate 3 и Castle.ActiveRecord для MySQL, и мы пытаемся получить "один сеанс на запрос" для работы с этим руководством.

И, кажется, работает для некоторых вещей, но когда мы делаем SaveAndFlush(), команда выдает нам ошибку:

A different object with the same identifier value 
was already associated with the session: 142

И если мы попытаемся сделать только Save() мы получили то же сообщение, так что оно не имеет ничего общего с Flush() функция.

Я нашел какой-то результат при поиске, но ничего не могу использовать, чтобы заставить его работать.

Что-то, что я не проверял, потому что я не знаю, как я это делаю,

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")

Есть идеи?

1 ответ

В основном проблема может заключаться в том, что вы пытаетесь Save() объект, который уже существует. Если объект уже имеет идентификатор (object.Id = 142) тогда объект не нужно сохранять.

Если вы вносите в него изменения, и вам необходимо сохранить эти изменения, вам нужно использовать Update() метод (как упомянуто @OskarBerggren) или SaveOrUpdate() который в основном проверяет и решает, сохранить объект или обновить его. Последний может работать лучше всего в вашем случае. Измените свой текущий,

session.Save(object);

чтобы,

session.SaveOrUpdate(object);

Session объект из NHibernate's SessionFactory реализация. Тем не менее, я вижу, что вы используете ActiveRecordMediatorтак что вы можете использовать,

ActiveRecordMediator.GetSessionFactoryHolder().CreateSession()

создать Session Вы можете использовать, чтобы сохранить ваши модели.

Другие вопросы по тегам