跨多个线程使用相同的EntityManager

时间:2015-11-18 00:28:01

标签: java multithreading jpa entitymanager

我有一个JPA环境,它有一个应用程序管理的EntityManager。我手动创建entityManagerFactory并从中创建EntityManager。我想在多个线程中使用相同的EntityManager。文档说EntityManager不是线程安全的,但我的所有操作都只是读取,并且不会通过EntityManager进行写操作。我还对缓存中的数据进行了超时以确保一致性。在这种情况下,是否可以跨线程使用相同的EntityManager实例?或者在跨线程使用相同的EntityManager时会有任何副作用/错误数据。

由于

1 个答案:

答案 0 :(得分:0)

可以肯定的是,只需使用EntityManager锁定synchronized实例即可。

所以不要写

em.persist(...);

synchronized (em) {
    em.persist(...);
}

你可以read up about the locking mechanism here.