private void synchronizeHibernateState(PreUpdateEvent hibernateEvent, ModificationTrackingEntityAccess entityAccess) { Map<String, Object> modifiedProperties = entityAccess.getModifiedProperties(); if(!modifiedProperties.isEmpty()) { Object[] state = hibernateEvent.getState(); EntityPersister persister = hibernateEvent.getPersister(); synchronizeHibernateState(persister, state, modifiedProperties); } }
private String buildUpdateMessage(PreUpdateEvent event) { String[] propertyNames = event.getPersister().getEntityMetamodel().getPropertyNames(); Object[] oldStates = event.getOldState(); Object[] newStates = event.getState(); int index = 0; StringBuilder message = new StringBuilder(128); for (String propertyName : propertyNames) { message.append(message(propertyName, oldStates[index], newStates[index])); index++; } return message.toString(); }
@Override public Boolean call() { Object entity = event.getEntity(); boolean evict = false; if (preUpdateEventListener != null) { evict = preUpdateEventListener.call(entity); if (!evict) { synchronizePersisterState(event, event.getState()); } } return evict || doValidate(entity); } });
/** * Before update, update the modifiedDate. * * @param event The event. * @return false - continue persisting. */ @Override public boolean onPreUpdate(final PreUpdateEvent event) { Object entity = event.getEntity(); if (entity instanceof IModifiedDateEntity) { String[] propertyNames = event.getPersister().getEntityMetamodel() .getPropertyNames(); Object[] state = event.getState(); Calendar now = Calendar.getInstance(timeZone); IModifiedDateEntity persistingEntity = (IModifiedDateEntity) entity; persistingEntity.setModifiedDate(now); setValue(state, propertyNames, "modifiedDate", persistingEntity.getModifiedDate()); } return false; }