(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