public void update(EntityOperations context, Object entity) {
log.debug("Merging entity of class {} with primary key {}", context.getEntityClass().getCanonicalName(),
context.getPrimaryKey());
EntityMeta entityMeta = context.getEntityMeta();
Validator.validateNotNull(entity, "Proxy object should not be null for update");
Validator.validateNotNull(entityMeta, "entityMeta should not be null for update");
log.debug("Checking for dirty fields before merging");
Object realObject = proxifier.getRealObject(entity);
context.setEntity(realObject);
ProxyInterceptor<Object> interceptor = proxifier.getInterceptor(entity);
Map<Method, DirtyChecker> dirtyMap = interceptor.getDirtyMap();
List<DirtyChecker> dirtyCheckers = new ArrayList<>(dirtyMap.values());
if (dirtyCheckers.size() > 0) {
pushDirtySimpleFields(context, dirtyCheckers);
pushCollectionAndMapUpdates(context, dirtyCheckers);
dirtyMap.clear();
}
if (context.isClusteredCounter()) {
counterPersister.persistClusteredCounters(context);
} else {
counterPersister.persistCounters(context, entityMeta.getAllCounterMetas());
}
interceptor.setEntityOperations(context);
interceptor.setTarget(realObject);
}