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