Для ясности предположим, что в коде данных вы делаете следующее:
public void updateMyEntity(TheEntity oldEntity) {
final Session session = openSession();
try {
session.getTransaction().begin();
TheEntity attachedEntity = session.find( TheEntity.class, oldEntity.getId() );
copyDataFromDetachedEntityToAttached( oldEntity, attachedEntity );
session.getTransaction().commit();
}
catch ( Exception e ) {
if ( session != null && session.getTransaction().isActive() ) {
session.getTransaction().rollback();
}
throw e;
}
finally {
if ( session != null && session.isOpen() ) {
session.close();
}
}
}
Если TheEntity
состоит из некоторых базовых или каскадных ассоциаций, вы можете легко проигнорировать вызов объединить и просто изменить прикрепленный объект.Во время фиксации Hibernate выполнит сброс, который неявно объединит изменения, сделанные в любых прикрепленных объектах в контексте постоянства.
Теперь предостережение заключается в том, что TheEntity
имеет какие-либо ассоциации, для которых не включен каскад.Если это так, вам нужно будет обработать соответствующее постоянство для всех вновь добавленных ассоциаций.