栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

获取EntityManagerFactory的最佳实践

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

获取EntityManagerFactory的最佳实践

它们是重量级的,应该在应用程序范围内。因此,您需要在应用程序启动时将其打开,并在应用程序关闭时将其关闭。

该如何做取决于您的目标容器。它是否支持EJB3.x(Glassfish,JBossAS等)?如果是这样,那么如果您只用

@PersistenceContext
通常的方式在EJB中执行JPA工作,那么您根本就不必担心打开/关闭它们(与事务无关):

@Statelesspublic class FooService {    @PersistenceContext    private EntityManager em;    public Foo find(Long id) {        return em.find(Foo.class, id);    }    // ...}

如果您的目标容器不支持EJB(例如Tomcat,Jetty等),并且由于某种原因也无法选择像OpenEJB这样的EJB附加组件,那么您就

EntityManager
自己动手创建了(和事务),那么你最好的选择是
ServletContextListener
。这是一个
基本的 启动示例:

@WebListenerpublic class EMF implements ServletContextListener {    private static EntityManagerFactory emf;    @Override    public void contextInitialized(ServletContextEvent event) {        emf = Persistence.createEntityManagerFactory("unitname");    }    @Override    public void contextDestroyed(ServletContextEvent event) {        emf.close();    }    public static EntityManager createEntityManager() {        if (emf == null) { throw new IllegalStateException("Context is not initialized yet.");        }        return emf.createEntityManager();    }}

(注意:在Servlet 3.0之前,该类需要由

<listener>
in
web.xml
代替来注册
@WebListener

可以用作:

EntityManager em = EMF.createEntityManager();// ...


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486496.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号