I was working on something similar and this might get you closer
StateManagerImpl sm =
(StateManagerImpl)currentState.pcGetStateManager();
SaveFieldManager sfm = sm.getSaveFieldManager();
PersistenceCapable oldState = sfm.getState();
I believe you must also specifiy openjpa.RestoreState so that this can work ...
Hope this helps ...
John
> -----Original Message-----
> From: James Talbut [mailto:[email protected]]
> Sent: Monday, February 10, 2014 3:10 PM
> To: [email protected]
> Subject: Any way to access original field values by name from Auditor context
>
> Hi,
>
> I'm trying to record old and new field values in an Auditor.
> Using something like this I can get the new value (using the
> audited.getUpdatedFields() to provide the values for 'field'):
>
> private Object getFieldValue(Broker broker, Object object, String field) {
> if (object == null) {
> return null;
> }
> PersistenceCapable persistenceCapable =
> ImplHelper.toPersistenceCapable(object,
> JPAFacadeHelper.toEntityManager(broker));
> OpenJPAStateManager stateManager =
> (OpenJPAStateManager)persistenceCapable.pcGetStateManager();
> if (stateManager == null) {
> return null;
> }
> int fieldIdx = stateManager.getMetaData().getField(field).getIndex();
> Object value = stateManager.fetch(fieldIdx);
> if ((value instanceof RowSetHolder) &&
> (((RowSetHolder)value).getSize() == 0)) {
> return null;
> }
> return value;
> }
>
> But the old value has no state manager, so pcGetStateManager always returns
> null.
>
> The old object does have the correct values set on it, but I don't have to
> have to
> use reflection (and somehow work out the mapping from field name to method
> name).
>
> Is there any equivalent to the above that will work for the old values (as
> returned by audited.getOriginalObject()) ?
>
> Thanks.
>
> Jim