(This question通過註解& AOP納 - 基礎的解決方案,這是完全相反的是我的情況請不要簽收,作爲重複。)獲取的EntityManager由OpenEntityManagerInViewFilter創建編程
我用命名的Servlet過濾器爲每個請求獲取不同的線程本地EntityManager。
我想獲得屬於實際的Servlet請求(線程)的EntityManager。
我想要一個簡單的程序解決方案。用spring aop註解我的一些類並不會起作用,這正是我想要避免的。
P.挖一點點進入spring source code,我可以在spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewFilter.java
找到下面的代碼,創建並EntityManager的,並在實際申請註冊吧:
EntityManager em = createEntityManager(emf);
EntityManagerHolder emHolder = new EntityManagerHolder(em);
TransactionSynchronizationManager.bindResource(emf, emHolder);
AsyncRequestInterceptor interceptor = new AsyncRequestInterceptor(emf, emHolder);
asyncManager.registerCallableInterceptor(key, interceptor);
asyncManager.registerDeferredResultInterceptor(key, interceptor);
我所看到的,這個代碼莫名其妙地註冊新創建的EntityManager成實際的線程本地數據。問題是通過明確的程序解決方案獲得這些數據的「美麗」方式。
我有,它不工作,EntityManager保持空,獨立我做了什麼。最後,我刪除了每個註釋(即使是@Transactional註釋),現在我正在以程序方式執行所有操作。這是該項目的重大重構。它會起作用。我知道。 – peterh 2014-10-08 11:50:30
我懷疑你還有它會工作,你還沒有發佈你的配置,所以實際問題是什麼(我懷疑配置錯誤)。因此,如果您仍然需要幫助,請添加您的配置(xml和可能的web.xml)。 – 2014-10-08 17:49:44