Java Spring/Hibernate截断/删除表中的所有行-事务问题
我有一个Camel项目,在我们创建了一个controllbean之后,我们想要清理一个DB日志表。因此,每次运行应用程序时,我们都会截断一个名为agent orders的表。这是作为命名查询在Enity对象中设置的Java Spring/Hibernate截断/删除表中的所有行-事务问题,java,hibernate,spring,jpa,transactions,Java,Hibernate,Spring,Jpa,Transactions,我有一个Camel项目,在我们创建了一个controllbean之后,我们想要清理一个DB日志表。因此,每次运行应用程序时,我们都会截断一个名为agent orders的表。这是作为命名查询在Enity对象中设置的 @NamedNativeQuery(name="cleanOrderTable", query="TRUNCATE agent_orders",resultClass= AgentOrderEntity.class) 调用此查询的代码如下所示: @Component("mgr")
@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();
}
}
调用clear history方法,我们会得到一个错误javax.persistence.TransactionRequiredException:执行更新/删除查询
我已经尝试了一切,UserTransaction
,em.getTransaction().begin
-什么都不管用。知道我如何运行这个查询吗
我们在app context.xml中设置了以下tran manager:
<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>
我会尝试使用
TransactionTemplate
执行查询,以检查@Transactional注释是否真的没有效果
还有,resultClass=AgentOrderEntity.class
有什么进展?为什么截断表的查询需要返回某些内容?- 尝试调试并检查控制器是否已代理,以及在方法之前是否执行了与事务相关的代码。尝试启用数据库服务器日志以检查真正执行的查询
- 确保没有任何ServletFilters在进入控制器之前设置只读事务
- 确保您的实体管理器是传递给事务管理器的实体管理器
- 此外,我还发现了一些建议不要在servlet中使用@PersistenceContext的信息: