![](/img/trans.png)
[英]Hibernate JPA and Spring javax.persistence.TransactionRequiredException: no transaction is in progress
[英]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.