Program: 40247
Project: 40247
Buggy source:
public void dehydrate(){
  if (log.isTraceEnabled()) {
    log.trace("String_Node_Str" + MessageHelper.infoString(persister,id,persister.getFactory()));
  }
  final EntityMetamodel entityMetamodel=persister.getEntityMetamodel();
  final boolean[] uniqueness=persister.getPropertyUniqueness();
  final Cache<PropertyKey,List<Serializable>> propertyCache=GridMetadataManagerHelper.getPropertyCache(session.getFactory());
  for (int index=0; index < entityMetamodel.getPropertySpan(); index++) {
    if (persister.isPropertyOfTable(index,tableIndex)) {
      if (removePropertyMetadata) {
        if (uniqueness[index]) {
          Object[] oldColumnValues=Helper.getColumnValuesFromResultset(resultset,index,persister);
          PropertyKey propertyKey=new PropertyKey(persister.getTableName(tableIndex),persister.getPropertyNames()[index],oldColumnValues);
          List<Serializable> propertyValues=propertyCache.get(propertyKey);
          if (propertyValues != null) {
            final boolean lastId=propertyValues.size() == 1 && id.equals(propertyValues.get(0));
            if (lastId) {
              propertyCache.remove(propertyValues);
            }
 else {
              propertyValues.remove(id);
              propertyCache.put(propertyKey,propertyValues);
            }
          }
        }
      }
      if (dehydrate && includeProperties[index]) {
        gridPropertyTypes[index].nullSafeSet(resultset,fields[index],persister.getPropertyColumnNames(index),includeColumns[index],session);
      }
      if (addPropertyMetadata) {
        if (uniqueness[index]) {
          Object[] newColumnValues=Helper.getColumnValuesFromResultset(resultset,index,persister);
          PropertyKey propertyKey=new PropertyKey(persister.getTableName(tableIndex),persister.getPropertyNames()[index],newColumnValues);
          List<Serializable> propertyValues=propertyCache.get(propertyKey);
          if (propertyValues == null) {
            propertyValues=new ArrayList<Serializable>();
          }
          propertyValues.add(id);
          propertyCache.put(propertyKey,propertyValues);
        }
      }
    }
  }
}

Fixed version (ground truth):
public void dehydrate(){
  if (log.isTraceEnabled()) {
    log.trace("String_Node_Str" + MessageHelper.infoString(persister,id,persister.getFactory()));
  }
  final EntityMetamodel entityMetamodel=persister.getEntityMetamodel();
  final boolean[] uniqueness=persister.getPropertyUniqueness();
  final Cache<PropertyKey,List<Serializable>> propertyCache=GridMetadataManagerHelper.getPropertyCache(session.getFactory());
  for (int index=0; index < entityMetamodel.getPropertySpan(); index++) {
    if (persister.isPropertyOfTable(index,tableIndex)) {
      if (removePropertyMetadata) {
        if (uniqueness[index]) {
          Object[] oldColumnValues=Helper.getColumnValuesFromResultset(resultset,index,persister);
          PropertyKey propertyKey=new PropertyKey(persister.getTableName(tableIndex),persister.getPropertyNames()[index],oldColumnValues);
          List<Serializable> propertyValues=propertyCache.get(propertyKey);
          if (propertyValues != null) {
            final boolean lastId=propertyValues.size() == 1 && id.equals(propertyValues.get(0));
            if (lastId) {
              propertyCache.remove(propertyKey);
            }
 else {
              propertyValues.remove(id);
              propertyCache.put(propertyKey,propertyValues);
            }
          }
        }
      }
      if (dehydrate && includeProperties[index]) {
        gridPropertyTypes[index].nullSafeSet(resultset,fields[index],persister.getPropertyColumnNames(index),includeColumns[index],session);
      }
      if (addPropertyMetadata) {
        if (uniqueness[index]) {
          Object[] newColumnValues=Helper.getColumnValuesFromResultset(resultset,index,persister);
          PropertyKey propertyKey=new PropertyKey(persister.getTableName(tableIndex),persister.getPropertyNames()[index],newColumnValues);
          List<Serializable> propertyValues=propertyCache.get(propertyKey);
          if (propertyValues == null) {
            propertyValues=new ArrayList<Serializable>();
          }
          propertyValues.add(id);
          propertyCache.put(propertyKey,propertyValues);
        }
      }
    }
  }
}