我目前正在 servlet Filter
的 doFilter
方法中从 EntityManagerFactory
获取 EntityManager
,传递它到 Servlet,并在退出时关闭它。
就 EntityManager
的生命周期而言,这是一个好的实践吗?或者我应该为 EntityManager
设置不同的生命周期?
最佳答案
我觉得听起来不错。
过滤器和 servlet 将同时被多个线程使用(与无状态或有状态 EJB 不同)。因此,应根据请求查找 EntityManager。
或者,您可以通过指定需要 SingleThreadModel
来强制 Web 容器同步对 servlet 的访问(不确定过滤器),在这种情况下您可以注入(inject) EntityManager
在您的过滤器或 servlet 中一次完成。
以上信息来自这篇关于PersistenceContext in a web app的帖子.
我认为获取EntityManager
是一种廉价的操作(与获取工厂本身不同)。至少,Hibernate 的 Session 和 SessionFactory 就是这样。所以我会选择你的原创设计。
关于java - EntityManager 生命周期是否应该针对每个 Servlet 请求?或者更长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10102513/