Java EntityManager的生存期是否应为每个Servlet请求?还是更长?

Java EntityManager的生存期是否应为每个Servlet请求?还是更长?,java,jakarta-ee,servlets,jpa,servlet-filters,Java,Jakarta Ee,Servlets,Jpa,Servlet Filters,我目前正在servletFilter的doFilter方法中从EntityManager工厂获取一个EntityManager,将其传递给servlet,并在退出时将其关闭 就EntityManager的生命周期而言,这是一种良好的做法吗?或者我应该为EntityManager选择不同的生命周期吗?听起来不错 过滤器和servlet将由多个线程同时使用(与无状态或状态完整EJB不同)。因此,应根据每个请求查找EntityManager 或者,您可以通过指定需要SingleThreadModel来

我目前正在servlet
Filter
doFilter
方法中从
EntityManager工厂
获取一个
EntityManager
,将其传递给servlet,并在退出时将其关闭

EntityManager
的生命周期而言,这是一种良好的做法吗?或者我应该为
EntityManager
选择不同的生命周期吗?

听起来不错

过滤器和servlet将由多个线程同时使用(与无状态或状态完整EJB不同)。因此,应根据每个请求查找
EntityManager

或者,您可以通过指定需要
SingleThreadModel
来强制web容器同步对servlet的访问(对于筛选器不确定),在这种情况下,您可以在筛选器或servlet中一次性插入
EntityManager

上面的信息来自这篇文章


获得一个
EntityManager
我认为是一个廉价的操作(与获得工厂本身不同)。至少,Hibernate的会话和SessionFactory就是这样。所以我会选择你的原创设计

你链接到那里的那篇文章很好,但标题误导性很强。它应该是“不要在Servlet中使用@PersistenceContext”。