java – 我应该多久创建一个EntityManager?

我有一个EntityManagerFactory,我可以为其创建一个(或多个)EntityManager实例。我正在使用一个Servlet环境,我有一个EntityManagerFactory连接到servlet(通过servlet上下文),该servlet在servlet的生命周期中被共享(因此,对于所有用户)。

我可以执行以下操作之一:

>在我的servlet生命周期中创建一个EntityManager(例如在所有用户之间共享)
>每个用户创建一个(所以每个用户在HttpSession中获得自己)
>根据HTTP请求创建一个请求(比如通过实例化一个新的请求,并在doGet方法的末尾关闭它)

哪个最合适?创建EntityManager的成本是否显着?
如果我做一个单独的共享EntityManager,是否有单个事务范围(即独立用户之间的更新可以提交其他更改)?

最佳答案
整个servlet的一个EM听起来不好听。如果您没有使用容器管理的EM(例如EJB3),那么建议将EM用于particular unit of work

在Web应用程序环境中,您的第三个建议(每个HTTP请求一个)听起来不错。然而,这可能会导致您将数据库层与服务层绑定在一起(您的服务层甚至不需要知道EM的存在)。

另一种方法是在DAO中以编程方式表示交易,并让您的DAO为每个方法调用使用新的EM。

编辑:EMs创建的成本相对于具有显着开销的EMF。使用一个EMF(看起来像你这样做)和很多EMs是要走的路。

转载注明原文:java – 我应该多久创建一个EntityManager? - 代码日志