как сделать автоматическую фиксацию транзакции jpa - PullRequest
0 голосов
/ 14 октября 2019

У меня есть весеннее загрузочное приложение с весенней загрузкой версии 2.1.6. Я использую спящий режим JPA для транзакций БД.

В моем тасклете есть что-то вроде

List<Documents> documents = documentReposirory.findAll();

for(Documents doc : documents){
   //do something with doc
   documentReposirory.updateDocument(doc);
}
//business logic
RepeatStatus.FINISHED 

Я обновляю таблицу Document в цикле for. Но транзакция совершается только после того, как элемент управления покидает тасклет.

Мой вопрос:

1) Можно ли вручную зафиксировать транзакцию сразу после вызова update ()?

2) Если я обновляюсьобъект Documents, даже если я не вызываю операцию обновления, система автоматически обновляет базу данных после того, как элемент управления покинет тасклет. Почему это так? Как мы можем предотвратить это?

Мой класс репозитория похож на

public interface DocumentsRepository extends JpaRepository<Documents, Long> {

@Query("update .....")
public void updateDocument();
}

1 Ответ

0 голосов
/ 14 октября 2019

Используйте атрибуты транзакции для метода, который вызывает обновление с помощью TransactionAttributeType.REQUIRED, и метод обновления TransactionAttributeType.MANDATORY.

Дополнительная документация Ссылка Oracle EJB 3.0

     @TransactionAttribute(TransactionAttributeType.REQUIRED)
        public ... update (){
    ...
    List<Documents> documents = documentReposirory.findAll();

    for(Documents doc : documents){
       //do something with doc
       documentReposirory.updateDocument(doc);
    }
...
    }
    @TransactionAttribute(TransactionAttributeType.MANDATORY)
    public void updateDocument(Document doc){
    ...
    }
...