Error when removing embeddable entities from a persistent collection
--------------------------------------------------------------------
Key: OPENJPA-625
URL: https://issues.apache.org/jira/browse/OPENJPA-625
Project: OpenJPA
Issue Type: Bug
Components: kernel
Affects Versions: 1.1.0
Environment: OpenJPA 1.1.0
Java 6
MySQL 5
Extended Persistence Context
DataCache enabled
Reporter: Matthias Seidel
Say you have an EntityA which is annotated as @Embeddable and an EntityB which
contains a mapping like
@PersistentCollection(elementEmbedded = true, elementType = EntityA.class,
fetch = FetchType.LAZY)
private List<EntityA> list;
Now if you remove an entry from the list of a persistent EntityB and commit the
transaction it leads to the following exception:
Caused by: <openjpa-1.1.0-runknown fatal user error>
org.apache.openjpa.persistence.ArgumentException: Could not locate metadata for
the class using oid "[EMAIL PROTECTED]" of type "class
org.apache.openjpa.datacache.DataCachePCDataImpl".
FailedObject: [EMAIL PROTECTED]
at
org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:1025)
at
org.apache.openjpa.kernel.BrokerImpl.newStateManagerImpl(BrokerImpl.java:1176)
at org.apache.openjpa.kernel.BrokerImpl.findAll(BrokerImpl.java:964)
at org.apache.openjpa.kernel.BrokerImpl.findAll(BrokerImpl.java:913)
at
org.apache.openjpa.kernel.AbstractPCData.toRelationFields(AbstractPCData.java:217)
at
org.apache.openjpa.kernel.AbstractPCData.toNestedFields(AbstractPCData.java:184)
at
org.apache.openjpa.kernel.AbstractPCData.toField(AbstractPCData.java:78)
at org.apache.openjpa.kernel.PCDataImpl.loadField(PCDataImpl.java:197)
at org.apache.openjpa.kernel.PCDataImpl.load(PCDataImpl.java:167)
at
org.apache.openjpa.datacache.DataCacheStoreManager.load(DataCacheStoreManager.java:383)
at
org.apache.openjpa.kernel.DelegatingStoreManager.load(DelegatingStoreManager.java:116)
at
org.apache.openjpa.kernel.ROPStoreManager.load(ROPStoreManager.java:78)
at
org.apache.openjpa.kernel.StateManagerImpl.loadFields(StateManagerImpl.java:2911)
at
org.apache.openjpa.kernel.StateManagerImpl.loadField(StateManagerImpl.java:2989)
at
org.apache.openjpa.kernel.StateManagerImpl.fetchObjectField(StateManagerImpl.java:2238)
at
org.apache.openjpa.kernel.StateManagerImpl.fetchField(StateManagerImpl.java:775)
at
org.apache.openjpa.kernel.StateManagerImpl.cascadeDelete(StateManagerImpl.java:2860)
at
org.apache.openjpa.kernel.BrokerImpl.deleteDeref(BrokerImpl.java:2117)
at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1955)
at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1905)
at
org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1823)
at
org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalManagedRuntime.java:81)
at org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1347)
at
org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java:877)
at
org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:512)
... 12 more
After some digging I think I found the cause in the
AbstractPCData.toNestedFields method:
case JavaTypes.PC:
if (vmd.isEmbedded())
for (Iterator itr = data.iterator(); itr.hasNext();)
ret.add(toEmbeddedField(sm, vmd, itr.next(), fetch, context));
// no break
should probably be:
case JavaTypes.PC:
if (vmd.isEmbedded()) {
for (Iterator itr = data.iterator(); itr.hasNext();)
ret.add(toEmbeddedField(sm, vmd, itr.next(), fetch, context));
return ret;
}
// no break
At least it worked for me this way.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.