当前位置: 首页 > 面试题库 >

注入EntityManagerVs。实体管理器工厂

鄢翰藻
2023-03-14
问题内容

一个很长的问题,请忍受我。

我们将Spring +
JPA用于Web应用程序。我的团队在讨论如何在注入EntityManagerFactoryGenericDAO(基于泛型的东西对AppFuse中提供的线DAO,我们不使用JpaDaosupport过的注射某种原因)EntityManager。我们正在使用“应用程序管理的持久性”。

反对注入a的论点EntityManagerFactory是它太重了,因此不是必需的,这EntityManager就是我们需要的。而且,由于Spring将为每个Web请求创建一个DAO的新实例(我对此表示怀疑),因此不会有任何并发​​问题,因为在同一EntityManager实例中,两个线程共享该线程。

注入EFM的理由是,对于拥有工厂的人来说,这始终是一个很好的实践。

我不确定哪种方法最好,请问有人可以启发我吗?


问题答案:

Spring文档在此处详细说明了注入EntityManagerFactory与EntityManager的优缺点,我不确定是否可以对此进行改进。

话虽如此,您的问题中有一些要澄清的地方。

… Spring将为每个Web请求创建一个DAO的新实例…

这是不正确的。如果您的DAO是Spring
bean,则它是单例,除非您通过scopebean定义中的属性对其进行了配置。为每个请求实例化DAO会很疯狂。

注入EMF的理由是,对于拥有工厂的控制权而言,这是一种良好的实践做法。

这种说法并没有真正成立。一般的良好做法是,应向对象注入完成工作所需的最少协作者。



 类似资料:
  • 编辑:堆栈跟踪如下: 下面是persistence.xml:

  • 我刚刚开始使用Spring ROO,并使用数据库逆向工程命令生成了我的实体类。然而每当我试图调用生成的实体类中的一个CRUD方法时,我总是得到这个异常:Java . lang . illegalstateexception:实体管理器没有被注入(Spring Aspects JAR是否被配置为AJC/AJDT方面库?) 我怀疑(通过查看生成的文件)EntityManager没有被注入到类中。你能告

  • 我有一个在Eclipse中定义的非常基本的JavaEE应用程序(一个EJB,一个带有PrimeFaces的网页,一个JPA实体)。它有四个项目,一个用于EAR,一个用于EJB,一个用于JPA,一个用于Web部件。问题是,我试图在JPA项目的persistence.xml中配置HiberNate作为持久化框架,但它并没有像我预期的那样完全工作。在我的EJB(@Statless)中,我可以通过两种方式

  • 我试图使用spring boot将EntityManager注释注入到我的DAO中,但是得到一个< code > InvalidDataAccessApiUsageException 消息,说没有可用的事务EntityManager。我的印象是,只要Spring Boot从< code>application.yml中获得了我的数据源信息,并且我用< code>@PersitenceContext

  • 我有一个EAR应用程序(要部署在WebLogic12c上),它有一个“持久化”组件。“persist”组件使用JPA(实现:EclipseLink)来持久化对象。 使用entityManager的bean声明为,实体管理器通过注释注入。 问题是,我每次尝试访问entityManager时都有一个(意思是他没有被正确注入)。 persistence.xml 我在常规代码中是这样使用的: MyBean

  • 目前,我学习JavaEE JPA规范。我使用Hibernate作为JPA实现。我有下一个问题: 我有一个简单的实体 还有一个简单的服务: persistence.xml有下一个视图: 我不明白为什么Hibernate会话没有注入BookService。在作为EntityManager的图书服务中,我得到了org.jboss.as.TransactionScopedEntityManager而不是来