2011-12-09 4 views
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) 
+0

OpenJPAのバージョンとエンティティをどのように強化していますか? – Rick

+0

すべてのエンティティの* hashCode()*と* equals()*を正しく実装しましたか?これらのメソッドのどこにでもidを使用していませんか? – MaDa

+0

OpenJPA 1.2.2。私はhashCodeとequalsを実装していませんでした。私はそれらが必要ですか? –

答えて

0

実行時エンハンサーを使用した後は、ほとんどの問題は、離れて行きます。

関連する問題