我在非托管(无 EJB)上下文中使用 JPA(Eclipselink)。
我的问题是:我应该保持实体管理器打开多久?
Swing 应用程序: - 只要应用程序正在运行,一个打开的实体管理器 - 每个单独的操作一个新的实体管理器
Web 应用程序: - 每个(不同)操作一个实体管理器 - 每个请求一个 - 每个会话一个 - 每个应用程序一个(-范围),假设应用程序是线程安全的
最好的祝福
我在非托管(无 EJB)上下文中使用 JPA(Eclipselink)。
我的问题是:我应该保持实体管理器打开多久?
Swing 应用程序: - 只要应用程序正在运行,一个打开的实体管理器 - 每个单独的操作一个新的实体管理器
Web 应用程序: - 每个(不同)操作一个实体管理器 - 每个请求一个 - 每个会话一个 - 每个应用程序一个(-范围),假设应用程序是线程安全的
最好的祝福
对于 Swing 应用程序,我将选择EntityManager
每个操作一个,因为创建一个非常便宜,而且您可能不想EntityManager
在不使用它时保留这么多的实体(这是EntityManager
每个应用程序一个)。
对于 Web 应用程序,使用的典型模式是“OpenSessionInView”模式(Session
适用于 Hibernate,但也可以应用,EntityManager
因为两者在逻辑上提供相同的角色/功能)。
更多信息: https ://community.jboss.org/wiki/OpenSessionInView
希望这可以帮助。
每个请求一个实体管理器应该是正常的。但他们应该通过一些连接池工作。