使用JPA休眠模式更新数据库时,是否有方法可以消除“ TransactionRequiredException:执行更新/删除查询”错误?

问题描述

当我从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();
            });
        }

解决方法

作为配置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;
    }
}