Вообще говоря, хорошей практикой является аннотирование с помощью бизнес-методов @Transactional аннотированных классов @Service. Таким образом, конечно, весь метод будет выполняться как единица работы атома c. Насколько я знаю, другой хорошей практикой является использование репозиториев для извлечения и сохранения сущностей, без аннотирования репозиториев с помощью @ Transactional.
Метод save()
в репозитории также является хорошим местом для размещения логов аудита c, например. Теперь давайте создадим следующий сценарий:
@Transactional
public void executeSomeTask() {
List<MyEntity> lst = someRepo.loadEntities();
List<SecondEntity> lst2 = anotherRepo.loadEntities();
// work on lst and lst2, changing some properties
someReport.saveList(lst);
anotherRepo.saveList(lst2);
}
С кодом, показанным выше, вызов метода saveList()
в обоих репозиториях не нужен, потому что он аннотирован @Transactional executeSomeTask()
, если вызов метода заканчивается без исключений, все изменения на объектах будут автоматически сохраняться. Если забыть вызвать репозитории, все логи аудита c будут пропущены. Какова лучшая практика в этих случаях? В двух словах, я хотел бы применить вызов методов сохранения в хранилище для фактического сохранения данных.