java - 将 Eclipselink 与 Streams 结合使用会产生 NullPointerException

标签 java jpa eclipselink

我们有一个使用 Eclipselink weaving 和 JPA 的应用程序。假设我们有一个 Family 对象,它与 Person 对象具有一对多的关系。我们从数据库中检索一组 Person 对象,然后使用 Java 8 Streams 和 spliterator 并行处理 Person 对象。我们最终得到一个 NullPointerException,从 Eclipselink 代码中查看,该异常似乎是由两个线程在不同的 Person 对象上操作但试图同时实例化同一个 Family 克隆对象引起的。

从谷歌搜索看来,以这种方式使用编织和延迟加载的 Eclipselink 不是线程安全的,这是正确的吗?如果是这样,在保留一定程度并行性的同时处理此问题的最佳方法是什么?

谢谢

大卫

最佳答案

描述不清楚 - 您是否正在读取单个 Person 实例,然后在不同线程之间共享它?

从单个 EntityManager 读取的对象不是线程安全的 - 它们由该 EntityManager 管理和跟踪,这意味着代表单个进程的工作单元。每个线程都需要从自己的EntityManager中读取对象;它被配置为从共享缓存中复制实体。否则,如果您需要缓存一个对象以在不同线程之间使用,您可以确保提取整个图或自己在延迟提取的部分上添加同步。

关于java - 将 Eclipselink 与 Streams 结合使用会产生 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62217542/

相关文章:

java - 如何隐藏(使其不可见)JTable 中的行?

java - Hibernate 抛出 PK 违规错误

java - spring-data-jpa 存储库在查询中使用 Collection 作为 @Param

java - JPA 与@ManyToOne

java - Swing 和 Nimbus : Replace background of JPopupMenu (attached to JMenu)

Java流。只有一次

java - 在 Java 中格式化 toString

java - 在 jpa/EclipseLink 创建表后执行 sql 脚本?

java - JPA @Id and insertable = false, updatable = false 抛出异常

jpa - 如何分离实体 (JPA 2.0/EclipseLink/JBoss)