【问题标题】:Is there a way to eliminate the 'TransactionRequiredException: Executing an update/delete query' error when updating a database using JPA hibernate?使用 JPA hibernate 更新数据库时,有没有办法消除“TransactionRequiredException:执行更新/删除查询”错误?
【发布时间】:2020-08-20 05:14:56
【问题描述】:

当我从 java 测试类调用并运行此方法时,我收到 javax.persistence.TransactionRequiredException: Executing an update/delete queryerror。我做错了什么?我在网上挖了一下,发现一个流行的建议是在方法中添加@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();
            });
        }

【问题讨论】:

    标签: java hibernate jpa jpql


    【解决方案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;
        }
    }
    

    【讨论】:

    • 我试过import org.springframework.transaction.annotation.Transactional;但它不起作用。我将鼠标悬停在事务上,错误显示无法解析符号“事务”
    • 你在哪里得到这个错误Cannot resolve symbol 'transaction' ??
    • 在import org.springframework.transaction.annotation.Transactional; the word 交易是红色的,无法解决
    • @Theman 您应该将 Maven/Gradle 依赖项配置附加到您的问题中。看起来您缺少对 spring-tx 工件或包含它的其他工件的依赖。或者您只是忘记重新运行脚本(mvn clean compile 或 gradlew build)
    • 它是一个 Maven 项目。所需的人工制品是什么?
    猜你喜欢
    • 2014-11-07
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 2020-12-22
    相关资源
    最近更新 更多