У меня есть ситуация, в которой мне нужно повторно присоединить отдельные объекты к сеансу гибернации, хотя в сеансе МОЖЕТ уже существовать объект с таким же идентификатором, что приведет к ошибкам.
Прямо сейчас я могу сделать одну из двух вещей.
getHibernateTemplate().update( obj )
Это работает тогда и только тогда, когда объект не существует в сеансе гибернации. Выдаются исключения, указывающие, что объект с данным идентификатором уже существует в сеансе, когда он понадобится мне позже.getHibernateTemplate().merge( obj )
Это работает, если и только если объект существует в сеансе гибернации. Исключения генерируются, когда мне нужно, чтобы объект был в сеансе позже, если я использую это.
Учитывая эти два сценария, как я могу в общем случае присоединять сеансы к объектам? Я не хочу использовать исключения для управления потоком решения этой проблемы, так как должно быть более элегантное решение ...
refresh()
отдельные объекты? Просматривая спецификации 2.0, я не вижу никакого оправдания; просто это не разрешено.*Reattaching a modified detached instance* A detached instance may be reattached to a new Session (and managed by this new persistence context) by calling update() on the detached object. In our experience, it may be easier for you to understand the following code if you rename the update() method in your mind to reattach()—however, there is a good reason it’s called updating.
больше можно найти в разделе 9.3.2lock(LockMode.NONE)
фактически может быть вызван на временном объекте, и он действительно присоединяет объект к сеансу. См stackoverflow.com/a/3683370/14379