0
私は3つのテーブルを持っています。表A複合FKを使用した表BとCの両方への参照。 私は単純に行うと:それは私にConcurrentModificationExceptionを与えOpenJPA:ConcurrentModificationException単一のスレッドenv内のエンティティを見つけるとき
A a = (A) em.find(A.class, aPk);
。 何がうまくいかないかについての任意のポインタ?
@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のバージョンとエンティティをどのように強化していますか? – Rick
すべてのエンティティの* hashCode()*と* equals()*を正しく実装しましたか?これらのメソッドのどこにでもidを使用していませんか? – MaDa
OpenJPA 1.2.2。私はhashCodeとequalsを実装していませんでした。私はそれらが必要ですか? –