簡體   English   中英

Hibernate + Spring:javax.persistence.TransactionRequiredException:沒有正在進行的事務

[英]Hibernate + Spring: javax.persistence.TransactionRequiredException: no transaction is in progress

我目前正在使用 Spring 和 Hibernate 建立一個項目。 在其他幾個問題之后,我遇到了下一個問題:P

反正。 當調用entityManager.flush()我得到一個異常: javax.persistence.TransactionRequiredException: no transaction is in progress

我已經用@Transactional注釋了我的課程,但它仍然無法正常工作。

我在這里閱讀了人們遇到類似問題的 serval 線程,但解決方案始終是<tx:annotation-driven transaction-manager="transactionManager" /> 但是我已經有了這個配置。

我不確定我應該提供什么代碼或文件,所以你可以在這里找到整個項目: https : //drive.google.com/file/d/0B7Exc4dHICl-UDN3ZEJnbS1FZFk/edit?usp=sharing

先感謝您。

是關於@Transactional不工作時的配置的帖子 - 你在appContext.xml設置了標簽<context:component-scan>嗎? 這既掃描包中的 bean 以注冊並激活注釋。 如果你沒有一個<context:component-scan>@Transactional注解不會wrapp在事務的方法。

我通過實現ApplicationListener<ContextRefreshedEvent>並把自引用放到服務調用中,找到了這個問題的解決方案。

出現問題是因為調用方法中沒有啟動事務,並且后續方法調用是內部引用,因此沒有創建新事務。 因此,我必須要么將我的調用方法設為事務性,要么創建一個內部引用並通過該引用調用后續方法。

您必須將以下方法覆蓋為

private MyService myService = myService;    
@Override
        public void onApplicationEvent(ContextRefreshedEvent event) {
            myService = event.getApplicationContext().getBean(MyService.class);
        }

然后在您希望事務處於活動狀態的地方使用myService.myMethod()而不是myMethod()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM