Не видя, что делает getCategory()
, трудно ответить на ваш вопрос.Согласно документам hibernate, Session.update ожидает, что будет передан отсоединенный объект, который является объектом, который был возвращен Session.load () или Session.get () из предыдущего сеанса, который был закрыт,
Оказывается, что при обычном режиме гибернации обновление редко требуется.Это потому, что Hibernate может автоматически обнаруживать изменения в объектах.Вот более распространенный шаблон:
Transaction tx = null;
try
{
tx=session.beginTransaction();
tx.begin();
Category X = session.load(Category.class,[categoryId])
X.setXXX(...) // update the category
tx.commit();
return true;
}
catch (Exception e)
{
tx.rollback();
e.printStackTrace();
return false;
}
После принятия hibernate узнает, что категория, возвращенная из Load, была изменена, и автоматически выдаст обновление для базы данных.
Заявлено более формально,hibernate автоматически обнаружит изменения, внесенные в постоянные объекты, и автоматически выдаст UPDATE, когда транзакция будет зафиксирована.Постоянная сущность - это любая сущность, возвращаемая из Session.get, Session.load или любой из функций запроса сеанса.
Более подробную информацию о постоянных, обособленных и переходных объектах можно найти здесь
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/objectstate.html#objectstate-overview