问题描述
当我从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;
}
}