#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. Какой требуемый артефакт?