Нужно ли мне явно сохранять измененный объект домена в транзакции spring?

#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, чтобы убедиться, что он проверен на наличие ошибок.