Jpa EJB3.x:具有EntityManagerFactory的扩展或事务范围的EnityManager
试图找出一些可能的情况,当Jpa EJB3.x:具有EntityManagerFactory的扩展或事务范围的EnityManager,jpa,ejb,entitymanager,Jpa,Ejb,Entitymanager,试图找出一些可能的情况,当EntityManagerFactory在EJB中有用时。当然,通常只需要一个事务范围的EntityManager(JTA范围),以便所有注入的EntityManager共享相同的PersistenceContext。 在以下情况下会发生什么: 当使用@PersistenceContext(type=PersistenceContextType.EXTENDED)时:是否启用了JTA?此类实体管理者的请求是否会在JTA的上下文中执行?若否,是哪一项??(注意:当然,它只
EntityManagerFactory
在EJB中有用时。当然,通常只需要一个事务范围的EntityManager
(JTA范围),以便所有注入的EntityManager共享相同的PersistenceContext
。
在以下情况下会发生什么:
@PersistenceContext(type=PersistenceContextType.EXTENDED)
时:是否启用了JTA?此类实体管理者的请求是否会在JTA的上下文中执行?若否,是哪一项??(注意:当然,它只适用于@Stateful
ejb)。当然,很明显,在这种情况下,EntityManager将拥有自己的/特殊的PersistenceContext@PersistenceUnit
在EJB中获得Entitymanager工厂
时(我想它可以在所有类型的EJB中工作,对吗?),获得的Entitymanager
JTA是否已启用(当然Entitymanager.joinTransaction()
是必需的)?如何从工厂获得事务范围(启用JTA)或扩展EntityManager?何时使用工厂而不是实体管理器是有用的。(当然,很明显EntityManagerFactory是Java SE应用程序到JPA的唯一接口,但是EJB呢?)您的问题围绕着这样一个假设,即您必须在EJB中注入@PersistenceUnit以获得EntityManagerFactory。好。。。让我在这里讲述一些缺失的背景: 在servlet中 为了实例化EntityManager,我们必须遵循以下步骤:
至于你的第二个问题,我相信第一个答案和上面的背景叙述一开始就不需要问它了 我建议买一本关于EJB的书。这个不错。如果您不理解其中的区别,您可能只想使用PersistenceContext。你很有可能知道你是否需要另一种选择。问题是什么?我看到了几个问题,其中一些是自我回答的,但并非全部都正确。什么时候在JEE应用程序中使用扩展持久性上下文是关键问题吗?@jahroy这是我读的书。只是想弄明白一些事情。到目前为止,我所需要的几乎都是
@PersistenceContext
注释。再次:我只是想弄明白一些事情…@kostja是的,我还有更多的问题。我希望对我的提问和我的问题的答案有一些确认/更正…@Sam谢谢你的回答。检查我是否理解正确:如果将EntityManager
变量保存到Servlet中的静态变量中,以便在Servlet的其他线程中使用它(例如检查变量是否为null),则抛出一些意外异常的可能性很大?