Details
Description
I need to get original object state before a merge() is called.
I tried in my service edit() method, by using :
public void edit(Customer customer) {
Customer initialState = null;
log.info("About to update customer id " + customer.getCustomerId() + " with name " + customer.getName());
PersistenceCapable currentState = (PersistenceCapable)customer;
try
{ StateManagerImpl sm = (StateManagerImpl)currentState.pcGetStateManager(); SaveFieldManager sfm = sm.getSaveFieldManager(); PersistenceCapable oldState = sfm.getState(); initialState = (Customer)oldState; log.info("Customer id " + customer.getCustomerId() + " OLD NAME WAS " + initialState.getName()); }catch (Exception e)
{ log.severe("Failed to get old object state: " + e.toString()); }
getEntityManager().merge(customer);
}
I get the error:
SEVERE: Failed to get old object state: java.lang.ClassCastException: org.apache.openjpa.kernel.DetachedStateManager cannot be cast to org.apache.openjpa.kernel.StateManagerImpl
Can you please suggest a way to get the original loaded object?