Hibernate EntityManager
如何在多线程应用程序中使用(例如,每个客户端连接在服务器上启动它自己的线程)。多线程应用程序中的EntityManager?
EntityManager的是否应仅仅通过EntityManagerFactory的创建一次,如:
private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("unit");
private static EntityManager em = emf.createEntityManager();
public static EntityManager get() {
return em;
}
还是我必须重新为每个线程的entitymanger,并为每个关闭EM交易?
我的CRUD方法看起来就像这样:
public void save(T entity) {
em.getTransaction().begin();
em.persist(entity);
em.getTransaction().commit();
em.close();
}
public void delete(T entity) {
em.getTransaction().begin();
em.remove(entity);
em.getTransaction().commit();
em.close();
}
我会havew运行emf.createEntityManager()
每个.begin()
过吗?还是我陷入困境,因为每个人都在用自己的缓存创建一个自己的EntityManager实例?
所以用这个,很明显,我将有一个单一的EMF,并为每个线程创建一个新的EM。但仍然:如果我在每次交易后关闭EM,我是否每次都需要重新创建EM(在线程中多次)? – membersound
关闭EM后,您无法再使用它了。但你当然可以使用一个EM进行多次交易。请记住,EM是一个为廉价创作而设计的轻量级对象。确定你的工作单位并为他们使用一个EM。你可能会发现[参考文档](http://docs.jboss.org/hibernate/entitymanager/3.6/reference/en/html/)有趣。 –