正如标题所示,我在我的 Web 应用程序上使用 Apache Struts2 和 JPA Eclipselink。假设我在那里有几个编辑选项,其中大多数只跨越一个动作和一个 JSP 页面。在那种情况下,我正在做的方法是显而易见的:
EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
EntityManager em = emfactory.createEntityManager();
em.getTransaction().begin();
Entity entity = em.find( Entity.class, this.id );
entity.setName("Test");
entitymanager.getTransaction().commit();
entitymanager.close();
emfactory.close();
但是,还有一个更复杂的编辑选项,它跨越 4 个不同的 JSP 页面(甚至更多操作)。我使用的方法是将 EntityManager 和 EntityTransaction 对象都存储在会话对象中(在第一个编辑操作中),然后在最后一个中检索它,以完成事务。像这样的东西:
1.第一次编辑动作:
EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
em = emfactory.createEntityManager();
et = em.getTransaction();
et.begin();
this.session.put("em", em);
this.session.put("et", et);
2. 上次编辑动作:
em = (EntityManager) session.get("em");
et = (EntityTransaction) session.get("et");
entity.setName("Test");
et.commit();
em.close();
所以,我的问题是:推荐这种方法吗?它似乎工作正常,但也许有一个我不知道的更好、更可靠的解决方案。您对此有何看法?