Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring/Hibernate截断/删除表中的所有行-事务问题_Java_Hibernate_Spring_Jpa_Transactions - Fatal编程技术网

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

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")

我有一个Camel项目,在我们创建了一个controllbean之后,我们想要清理一个DB日志表。因此,每次运行应用程序时,我们都会截断一个名为agent orders的表。这是作为命名查询在Enity对象中设置的

@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的信息:
希望这有帮助