5.1。
实体管理器和交易范围:
EntityManager是一种廉价的,非线程安全的对象,应针对单个业务流程,单个工作单元使用一次,然后丢弃。
这完全可以回答您的问题。不要通过线程共享EM。只要一个事务处理是 工作单元的 一部分,就可以对多个事务使用一个EM 。
此外,关闭后无法使用EntityManger
:
调用close方法后,EntityManager实例上的所有方法以及从该实例获取的任何Query,TypedQuery和StoredProcedureQuery对象都将引发IllegalStateException。
考虑这样的事情:
public class Controller { private EntityManagerFactory emf; public void doSomeUnitOfWork(int id) { EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); CrudDao dao = new CrudDao(em); Entity entity = dao.get(id); entity.setName("James"); dao.save(entity); em.getTransaction.commit(); em.close(); }}


