编程语言
首页 > 编程语言> > java-JPA桌面应用程序EntityManager的单个或多个实例

java-JPA桌面应用程序EntityManager的单个或多个实例

作者:互联网

在运行于Java SE环境中的桌面应用程序中(没有DI,除了JPA,纯Java之外没有其他框架),最好为持久层中的每个操作创建一个新的EntityManager或在整个共享一个EntityManager实例持久层?

这两种解决方案的优点/缺点?

更新:

该应用程序使用只有一个模式的一个数据库实例.

解决方法:

至少有三个充分的理由使每个操作具有一个EM.

如果任何其他进程修改了数据库(或者即使同一进程使用JDBC或批处理查询来修改数据库),则EM的缓存中也会有陈旧的数据.如果您的EM仅在交易期间有效,则几乎没有处理过时数据的风险.

如果EM发生任何异常,则它的状态不再可靠,必须关闭EM.

如果有多个线程访问EntityManager,则每个线程需要一个EM,因为EM不是线程安全的.

这是第四个问题:即使假设一切都正常,只有一个线程访问数据库,EM的高速缓存会逐渐增长并消耗内存.由于忘记了初始化关联的相反侧,因此还存在缓存中的对象图不一致的风险.每个事务只有一个EM不会出现此问题.

标签:jpa,entitymanager,desktop-application,java
来源: https://codeday.me/bug/20191029/1960797.html