java - 跨多个线程使用同一个EntityManager

标签 java multithreading jpa entitymanager

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

谢谢

最佳答案

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

所以不要写

em.persist(...);

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

您可以read up about the locking mechanism here.

关于java - 跨多个线程使用同一个EntityManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33769710/

相关文章:

Java Google Drive Android API,上传后获取文件ID

java - ChangeListener 功能用于检查带有时间延迟/或其他解决方案的键入值

c - 简单 pthread 代码中的奇怪结果

Java MySQL 防止竞争条件

java - 如何超快速地插入 100,000 个父行,每个行有 200 个子行?

java - 列出 arraylist 中的数据

java - JUnit 终止子线程

c# - 等待结果而不阻塞线程

google-app-engine - 通过 JPA 的 Salesforce 的 Database.com 和 Google App Engine

java - JPA OneToMany映射异常: Field XXX cannot declare that it is mapped by another field