Есть ли способ устранить ошибку ‘TransactionRequiredException: выполнение запроса на обновление / удаление’ при обновлении базы данных с использованием JPA hibernate?

#java #hibernate #jpa #jpql

#java #спящий режим #jpa #jpql

Вопрос:

Когда я вызываю и запускаю этот метод из тестового класса Java, я получаю javax.persistence.TransactionRequiredException: Executing an update/delete query ошибку. Что я мог сделать не так? Я покопался в Интернете и нашел популярное предложение добавить аннотацию @Transactional к методу. К сожалению, это действие не разрешило мой запрос. Я импортировал import javax.transaction.Transactional;

 @Transactional
        public List<TestEntity> testUpdate() {
            return execute("punit", entityManager -> {
                Query query = entityManager.createNamedQuery("myDate").setMaxResults(20);
                LocalDateTime dayBefore = LocalDateTime.now().minusDays(1);
                query.setParameter("previousDate", Timestamp.valueOf(dayBefore)).executeUpdate();
                return query.getResultList();
            });
        }
  

Ответ №1:

из конфигурационного xml ясно, что вы собираетесь использовать транзакцию на основе spring.

Пожалуйста, убедитесь, что импорт, который вы используете для @Transactional "org.springframework.transaction.annotation.Transactional"

в вашем случае это может быть "javax.transaction.Transactional"

Просто попробуйте приведенный ниже код. У меня все работает нормально.

 package com.sample;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.Optional;

@Service
@Transactional
@Slf4j
public class Sample {

    @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.SERIALIZABLE)
    public Optional<Model> updateRecord() {
        return null;
    }
}
  

Комментарии:

1. Я пытался import org.springframework.transaction.annotation.Transactional; , но это не работает. Я завис над транзакцией, и ошибка гласит, что не удается разрешить символ ‘транзакция’

2. Откуда вы получаете эту ошибку Cannot resolve symbol 'transaction' ??

3. В import org.springframework.transaction.annotation.Transactional; the word транзакция выделена красным цветом и не может быть разрешена

4. @Theman вы должны приложить свою конфигурацию зависимости Maven / Gradle к вашему вопросу. Похоже, вам не хватает зависимости от spring-tx артефакта или другого артефакта, который его включает. Или вы просто забыли перезапустить скрипт ( mvn clean compile или gradlew build )

5. Это проект maven. Какой требуемый артефакт?