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

Reply via email to