play異常之javax.persistence.TransactionRequiredException 事務異常

javax.persistence.TransactionRequiredException: Executing an update/delete query
	at org.hibernate.ejb.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:96)
	at bp.impl.zby.ZbyGoodsManageBpImpl.savePackageTicketsStrip(ZbyGoodsManageBpImpl.java:2066)
	at bp.impl.zby.ZbyGoodsManageBpImpl.saveTicket(ZbyGoodsManageBpImpl.java:2033)
	at bp.impl.zby.ZbyGoodsManageBpImpl.saveGoods(ZbyGoodsManageBpImpl.java:223)
	at controllers.remote.supplier.ZbyGoodsManageController.saveGoods(ZbyGoodsManageController.java:356)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:483)
	at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:750)
	at play.mvc.ActionInvoker.invoke(ActionInvoker.java:708)
	at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:684)
	at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:679)
	at play.mvc.ActionInvoker.invoke(ActionInvoker.java:172)
	at play.server.PlayHandler$NettyInvocation.execute(PlayHandler.java:237)
	at play.Invoker$Invocation.run(Invoker.java:264)
	at play.server.PlayHandler$NettyInvocation.run(PlayHandler.java:217)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:744)

上面代碼的異常原因就是:執行insert操作沒有開始事務

修改填如下即可,下面是play框架裏面jpa執行的操作,不同的框架,不同的情況會有所不同,

導致異常的異常原因就是上述原因了

        JPA.em().clear(); 
        //開啓事務
		if(!JPA.em().getTransaction().isActive()){
			JPA.em().getTransaction().begin();
		}

       需要執行的insert語句,此處不再粘貼過來了
        
       //提交事務
        JPA.em().getTransaction().commit();

 

 

 

備註:

需要啓用事務,因爲在執行update操作
需要看一下em有沒有beginTransaction()之類的方法。

1、如果有使用spring,可以在這個方法體上加上註解:@Transactional
2、在執行query.executeUpdate();的之前增加一句em.joinTransation();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章