为什么JPA EntityManager根据定义不是线程安全的?

时间:2014-10-01 17:14:19

标签: java multithreading spring jpa orm

据我所知,它实际上是一个游泳池,一个双向阅读&写入持久JPA实体的缓存。

我认为,这是一个类的典型情况,应该是真正的线程安全,并行和可重入。

但我在网上读到,情况并非如此。 Here我甚至读过,这是 定义的情况。

为什么?

1 个答案:

答案 0 :(得分:3)

任何人都可以阅读JPA规范,第7.2节

  

不能同时在多个实体管理器之间共享实体管理器   执行线程,作为实体管理器和持久化上下文   不要求线程安全。只能访问实体经理   以单线程方式。

EntityManager是一个快速创建和处置对象,并且从最常见的请求 - 响应用例开始,在请求开始时创建EntityManager并关闭它在最后。它不是对象的“池”,而它确实维护了它在生命周期中遇到的对象的缓存。 EntityManagerFactory是线程安全的。

PS问题不适合Stackoverflow,因为上面的“帮助”部分会告诉您。这不是“你遇到的一些问题”,而且很可能“创造讨论”。