【问题标题】:OpenJPA: ConcurrentModificationException when finding an entity in a single threaded envOpenJPA:在单线程环境中查找实体时出现 ConcurrentModificationException
【发布时间】:2011-12-09 23:32:10
【问题描述】:

我有三张桌子。表 A 引用了表 B 和表 C 以及复合 FK。 当我这样做时:

A a = (A) em.find(A.class, aPk);

它给了我 ConcurrentModificationException。 有什么会出错的指针吗?

@Entity
public class A implements Serializable {
@EmbeddedId
private APK pk;

@OneToOne(cascade=CascadeType.ALL)
private B b;

@OneToOne(cascade=CascadeType.ALL)
private C c;
}

@Entity
public class B implements Serializable {
@EmbeddedId
private BPK pk;
...
}

@Entity
public class C implements Serializable {
@EmbeddedId
private CPK pk;
...
}

堆栈跟踪:

Caused by: java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
    at java.util.HashMap$KeyIterator.next(HashMap.java:828)
    at org.apache.openjpa.kernel.ManagedCache.dirtyCheck(ManagedCache.java:307)
    at org.apache.openjpa.kernel.BrokerImpl.hasTransactionalObjects(BrokerImpl.java:3820)
    at org.apache.openjpa.kernel.BrokerImpl.addToTransaction(BrokerImpl.java:3892)
    at org.apache.openjpa.kernel.StateManagerImpl.setPCState(StateManagerImpl.java:216)
    at org.apache.openjpa.kernel.StateManagerImpl.initialize(StateManagerImpl.java:313)
    at org.apache.openjpa.kernel.StateManagerImpl.initialize(StateManagerImpl.java:275)
    at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreManager.java:351)
    at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:278)
    at org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:111)
    at org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57)
    at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:913)
    at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:871)

【问题讨论】:

  • 什么版本的 OpenJPA 以及您如何增强您的实体?
  • 你是否正确实现了所有实体的hashCode()equals()?你没有在这些方法的任何地方使用过 id 吗?
  • OpenJPA 1.2.2。我没有实现 hashCode 和 equals。我需要那些吗?
  • 同样很奇怪的是,如果映射是一对多或者只有一对一的映射,那么就不会出现异常。
  • 我从 PK 类中找到了那些生成的 hashCode() 和 equals()。他们怎么了?

标签: java jpa openjpa


【解决方案1】:

使用运行时增强器后,大多数问题都会消失。

【讨论】:

    猜你喜欢
    • 2015-11-25
    • 2023-04-03
    • 2014-09-04
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多