gpt4 book ai didi

java - Spring/Hibernate 截断/删除表中的所有行 - 事务问题

转载 作者:行者123 更新时间:2023-12-02 08:08:43 25 4
gpt4 key购买 nike

我有一个 Camel 项目,在创建控制 bean 后,我们想要清理数据库日志表。因此,每次运行应用程序时,我们都会截断一个名为代理订单的表。这是在实体对象中设置为命名查询。

@NamedNativeQuery(name="cleanOrderTable", query="TRUNCATE agent_orders",resultClass= AgentOrderEntity.class)

调用此查询的代码如下所示:

@Component("mgr")
public class Controller{

@PersistenceContext(unitName="camel")
private EntityManager em;
.......
@Transactional
public void clearHistoricalOrders() throws Exception{
Query query = em.createNamedQuery("cleanOrderTable");
query.executeUpdate();
}
}

调用清除历史记录方法我们得到一个错误javax.persistence.TransactionRequiredException: Executing an update/delete query

我已经尝试了一切,UserTransactionem.getTransaction().begin - 没有任何效果。知道如何运行此查询吗?

我们的应用程序 context.xml 中有以下 tran 管理器设置:

<tx:annotation-driven transaction-manager="txManager" />

<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager"
p:dataSource-ref="dataSource">
<property name="entityManagerFactory" ref="emFactory" />
</bean>

最佳答案

  • 尝试调试并检查您的 Controller 是否被代理以及在您的方法之前是否执行了与事务相关的代码。尝试启用数据库服务器日志来检查真正执行了哪些查询。
  • 确保在访问 Controller 之前没有任何设置只读事务的 ServletFilter。
  • 确保您的实体管理器是传递给事务管理器的实体管理器。
  • 此外,我还发现了一些建议不要在 servlet 中使用 @PersistenceContext 的信息:http://weblogs.java.net/blog/ss141213/archive/2005/12/dont_use_persis.html

希望这有帮助!

关于java - Spring/Hibernate 截断/删除表中的所有行 - 事务问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7777768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com