#java #hibernate #spring #transactions
#java #спящий режим #spring #транзакции
Вопрос:
Если у меня есть транзакция следующим образом, где мой объект домена отображается как каскадный.ВСЕ с использованием гибернации:
@Transactional
public void transactionAllMethod(Domain domain) {
domain.addItemToCollection(new Item);
//Do I need to call domain.saveOrUpdate() here, or will changes to the domain be flushed
//automatically at the end of the transaction with FLUSHMODE.AUTO?
Domain domain2 = new Domain();
//set some fields here
//Do I need to save my second domain as it is new, or again will things be
//automatically persisted during dirtychecking at the end of the transaction?
}
Если мне не нужно явно сохранять в любом случае, где я должен это делать?
Ответ №1:
вам нужно объединить любые изменения в существующий объект и сохранить новый.
Session session = sessionFactory.getCurrentSession();
session.merge(domain);
session.save(domain2);
Ответ №2:
Если домен новый, вам нужно будет сохранить его, а если он отсоединен, вам нужно будет вызвать update, чтобы повторно подключить его к сеансу. Hibernate будет проверять только объекты грязной проверки, которые подключены к текущему сеансу.
В случае domain2 вам необходимо вызвать save, чтобы убедиться, что он проверен на наличие ошибок.