我有一个Camel项目,在我们创建一个控制bean之后,我们要清理一个DB日志表。因此,每次运行应用程序时,我们都会TRUNCATE一个名为代理订单的表。这是在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();
}
}
调用清除历史记录方法,我们收到错误javax.persistence.TransactionRequiredException: Executing an update/delete query
我已尝试过所有内容,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>
答案 0 :(得分:1)
我尝试用TransactionTemplate
执行查询只是为了检查@Transactional注释是否真的没有效果。
此外,resultClass= AgentOrderEntity.class
有什么用?为什么截断表的查询需要返回一些东西?
答案 1 :(得分:1)
希望这有帮助!