Другой объект с таким же значением идентификатора уже был связан с сеансом: 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
Вы можете использовать, чтобы сохранить ваши модели.