private Object[] getOldDBState(AuditProcess auditProcess, String entityName, PostUpdateEvent event) { if ( isDetachedEntityUpdate( entityName, event.getOldState() ) ) { return auditProcess.getCachedEntityState( event.getId(), entityName ); } return event.getOldState(); }
private Object[] postUpdateDBState(PostUpdateEvent event) { final Object[] newDbState = event.getState().clone(); if ( event.getOldState() != null ) { final EntityPersister entityPersister = event.getPersister(); for ( int i = 0; i < entityPersister.getPropertyNames().length; ++i ) { if ( !entityPersister.getPropertyUpdateability()[i] ) { // Assuming that PostUpdateEvent#getOldState() returns database state of the record before modification. // Otherwise, we would have to execute SQL query to be sure of @Column(updatable = false) column value. newDbState[i] = event.getOldState()[i]; } } } return newDbState; }
@Override public void onPostUpdate(PostUpdateEvent event) { evictCache( event.getEntity(), event.getPersister(), event.getSession(), event.getOldState() ); }
private Object[] getOldDBState(AuditProcess auditProcess, String entityName, PostUpdateEvent event) { if ( isDetachedEntityUpdate( entityName, event.getOldState() ) ) { return auditProcess.getCachedEntityState( event.getId(), entityName ); } return event.getOldState(); }
private Object[] postUpdateDBState(PostUpdateEvent event) { final Object[] newDbState = event.getState().clone(); if ( event.getOldState() != null ) { final EntityTypeDescriptor<?> entityDescriptor = event.getDescriptor(); entityDescriptor.visitStateArrayContributors( contributor -> { int index = contributor.getStateArrayPosition(); if ( !contributor.isUpdatable() ) { // Assuming that PostUpdateEvent#getOldState() returns database state of the record before // modification. Otherwise, we would have to execute SQL query to be sure of // @Column(updatable = false) column value. newDbState[ index ] = event.getOldState()[ index ]; } } ); } return newDbState; }
@Override public void onPostUpdate(PostUpdateEvent event) { evictCache( event.getEntity(), event.getDescriptor(), event.getSession(), event.getOldState() ); }
@Override public void onPostUpdate(PostUpdateEvent event) { final String entityName = event.getDescriptor().getEntityName(); if ( getAuditService().getEntityBindings().isVersioned( entityName ) ) { checkIfTransactionInProgress( event.getSession() ); final AuditProcess auditProcess = getAuditService().getAuditProcess( event.getSession() ); Object[] oldState = getOldDBState( auditProcess, entityName, event ); final Object[] newDbState = postUpdateDBState( event ); final AuditWorkUnit workUnit = new ModWorkUnit( event.getSession(), event.getDescriptor().getEntityName(), getAuditService(), event.getId(), event.getDescriptor(), newDbState, oldState ); auditProcess.addWorkUnit( workUnit ); if ( workUnit.containsWork() ) { generateBidirectionalCollectionChangeWorkUnits( auditProcess, event.getDescriptor(), entityName, newDbState, event.getOldState(), event.getSession() ); } } }