0

我正在将应用程序从桌面迁移到 Web。在桌面应用程序中,用户使用不同的数据库用户连接到 Oracle 数据库,即用户由 Oracle 管理,而不是在数据库表中。都使用相同的方案来存储和管理数据,PLMU_PROD。

我必须为 Web 应用程序实现身份验证 (JPA),并且在阅读时,我必须为每个数据库用户创建一个 EntityManagerFactory。

我正在考虑的另一个选项是创建一个用户/密码表并使用相同的 EntityManagerFactory 为所有 EntityManager 提供服务,因为所有用户都将访问方案 PLMU_PROD 中的相同数据。

我想知道 PersistenceContext 是否在不同的 EntityManagerFactories 之间共享,因为我的 Web 服务器的 RAM 很少,并且不想浪费它有重复的实体。

谢谢你的时间!

4

1 回答 1

0

您似乎指的是缓存。JPA 要求 EntityManager 保持实体缓存,以便它们可以跟踪更改。因此,每个 EntityManager 都需要有自己的缓存,将在一个中进行的更改与其他可能同时进行的更改分开 - 事务隔离。在 EclipseLink 中,有一个在 EMFactory 级别共享的二级缓存的概念。 http://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching 是一篇关于 EclipseLink 中缓存的好文档。此二级缓存有助于避免数据库访问,并可根据需要禁用。如果您的 EntityManagers 不需要跟踪更改,例如如果应用程序是只读的并且实体未修改,您可以设置查询以从共享缓存中返回实体,以便使用读取的数据仅存在单个实例-only 查询提示: http: //www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/q_read_only.htm#readonly

只读实例可以避免重复和不必要地使用资源,但您需要适当地管理它们并在进行更改之前从 EntityManager 获取托管副本。

于 2013-09-12T19:24:08.870 回答