объект, передаваемый как параметр в методе обновления, может находиться либо в постоянном состоянии, либо в отключенном состоянии? - PullRequest
0 голосов
/ 04 ноября 2011

В соответствии с документом hibernate (в http://docs.jboss.org/hibernate/core/3.5/javadoc/org/hibernate/Session.html#update(java.lang.Object)) для метода обновления void update (Object object) выбрасывает здесь HibernateException, поскольку параметр, как говорят, находится в отдельном состоянии. Но я пробовал некоторые примеры, где этот переданный объект может бытьобъект также находится в постоянном состоянии. То, что я сделал, это

person = (Person)session. get(Person.class,1);
person.setName("scott");
// At this point of time person is in persistent stage as it has adentifier attached to it and also attached to session.
session.update(person);

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

Ответы [ 2 ]

0 голосов
/ 04 ноября 2011

Так что, согласно моему пониманию, переданный объект в качестве параметра в методе обновления может находиться либо в постоянном состоянии, либо в отключенном состоянии, верно?

Да, вы можете передать постоянный объект или отдельный объектдо update().Но update() влияет только на отсоединенный объект.Вызов update () для постоянного объекта: избыточность , а ничего не делает , поскольку объект уже является постоянным, и его состояние будет автоматически синхронизироваться с БД во время очистки.Таким образом, из вашего кода имя человека может быть обновлено до scott из-за сброса, но не из-за update ().Вы можете проверить это, удалив update(), а имя все еще можно обновить до scott!

update() влияет только на отсоединенный объект, что может сделать отсоединенный экземпляр постоянным и управляемым сеансом гибернации.

0 голосов
/ 04 ноября 2011

Странно. Моя документация для update ():

Обновить постоянный экземпляр идентификатором данного отдельный экземпляр. Если есть постоянный экземпляр с тем же идентификатор, исключение выдается. Эта операция касается связанные экземпляры, если сопоставление сопоставлено с Каскад = "копи-обновление".

Итак, я не думаю, что это работает для отдельных объектов. Я обычно сначала сливаю () их или обновляю () объект, если он отсоединен.

Вы пробовали, закрыв сессию, открыв новую, а затем обновив?

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