Java Mailing List Archive

http://www.gg3721.com/

Home » users.openjpa »

Refresh after another EM removes one-to-many member

Bert Bee-Lindgren

2008-05-15


Author LoginPost Reply
I have two EntityManagers

EM1 has an object r1 which has a one-to-many relationship
[CascadeType.ALL] myTees containing t1

EM2
 starts transaction
 reads r1
 removes t1 from r1.myTees
 commits transaction


When EM1 does a refresh(r1), it gets the following exception:
Caused by: <openjpa-1.0.2-r420667:627158 nonfatal store error>
org.apache.openjpa.persistence.EntityNotFoundException: The follwing
instnaces do not exist in the data store: [88979
[org.apache.openjpa.util.IntId]]
 at
org
.apache
.openjpa.kernel.BrokerImpl.newObjectNotFoundException(BrokerImpl.java:
4343)
 at
org.apache.openjpa.kernel.BrokerImpl.refreshInternal (BrokerImpl.java:
2796)
 ... 25 more


My expectation is that r1.myTees would simply be an empty collection
after the refresh.

An hibernate thread seemed to trace this to a cascade refresh being
done before the relationships destinations were rebuilt.
 From http://forum.hibernate.org/viewtopic.php?t=981635&highlight=
 Looking the hibernate code (admittedly, core hibernate), the
DefaultRefreshEventListener.onRefresh method has a call to
evictCachedCollections but after the refresh has been cascaded to its
children. It seems like this should happen before the refresh is
cascaded, or at least be an option.


Am I wrong to expect refresh to work this way?
Should I always do EM1.find()?

Thanks,
 Bert
©2008 gg3721.com - Jax Systems, LLC, U.S.A.