title: Updating individual column in Pivotal GemFire
body: <p>As per my knowledge, there is no option to update individual columns using a query in gemfire. To update an individual column I am currently getting the entire old object and modifying the changed value and storing it.  If anyone has implemented anything on updating individual columns, please share.</p>
  
  <pre><code>@Region("tracking")
  public class Tracking implements Serializable {
  public String id;
  public String status;
  public String program;
  }
  
  
  
  @Region("tracking")
  public interface TrackingQueryRepository extends CrudRepository&lt;Tracking, String&gt; {
  }
  </code></pre>
  
  <p>I am new to the implementation of the Delta Propagation. I have read the user guide and have tried to implement and received the exception given below. Can you please share your thoughts about
   this.</p>
  
  <p><strong>Another.java – Domain class</strong></p>
  
  <pre><code>import java.io.DataInput;
  import java.io.DataOutput;
  import java.io.IOException;
  import java.io.Serializable;
  import org.springframework.data.annotation.Id;
  import org.springframework.data.gemfire.mapping.Region;
  import com.fasterxml.jackson.annotation.JsonProperty;
  import com.gemstone.gemfire.Delta;
  import com.gemstone.gemfire.InvalidDeltaException;
  
  
  @Region("delta")
  public class Another implements Delta, Serializable {
  
      private static final long serialVersionUID = 1L;
  
      @Id
      private String anotherId;
  
      @JsonProperty("anotherProgramId")
      private String anotherProgramId;
  
      public Another() {
      }
  
      public Another(String anotherId, String anotherProgramId) {
          this.anotherId = anotherId;
          this.anotherProgramId = anotherProgramId;
      }
  
      public String getAnotherId() {
          return anotherId;
      }
  
      public void setAnotherId(String anotherId) {
          this.anotherIdChd = true;
          this.anotherId = anotherId;
      }
  
      public String getAnotherProgramId() {
          return anotherProgramId;
      }
  
      public void setAnotherProgramId(String anotherProgramId) {
          this.anotherProgramIdChd = true;
          this.anotherProgramId = anotherProgramId;
      }
  
      private transient boolean anotherIdChd = false;
      private transient boolean anotherProgramIdChd = false;
  
      @Override
      public String toString() {
          return "Another [anotherId=" + anotherId + ", anotherProgramId=" + anotherProgramId + "]";
      }
  
      @Override
      public void fromDelta(DataInput in) throws IOException, InvalidDeltaException {
  
          if (in.readBoolean()) {
              // Read the change and apply it to the object
              this.anotherId = in.toString();
              System.out.println(" Applied delta to field 'anotherId' = " + this.anotherId);
          }
          if (in.readBoolean()) {
              this.anotherProgramId = in.toString();
              System.out.println(" Applied delta to field 'anotherProgramId' = " + this.anotherProgramId);
          }
      }
  
      @Override
      public boolean hasDelta() {
          return this.anotherIdChd || this.anotherProgramIdChd;
  
      }
  
      @Override
      public void toDelta(DataOutput out) throws IOException {
          System.out.println("Extracting delta from " + this.toString());
          out.writeBoolean(anotherIdChd);
          if (anotherIdChd) {
              // Write just the changes into the data stream
  
              out.writeUTF(this.anotherId);
              // Once the delta information is written, reset the delta status
              // field
              this.anotherIdChd = false;
              System.out.println(" Extracted delta from field 'anotherId' = " + this.anotherId);
          }
          out.writeBoolean(anotherProgramIdChd);
          if (anotherProgramIdChd) {
              out.writeUTF(this.anotherProgramId);
              this.anotherProgramIdChd = false;
              System.out.println(" Extracted delta from field 'anotherProgramId' = " + this.anotherProgramId);
          }
  
      }
  
  }
  </code></pre>
  
  <p><strong>Client-cache.xml</strong></p>
  
  <pre><code>&lt;pdx&gt;
          &lt;pdx-serializer&gt;
              &lt;class-name&gt;com.gemstone.gemfire.pdx.ReflectionBasedAutoSerializer&lt;/class-name&gt;
              &lt;parameter name="classes"&gt;
                  &lt;string&gt;com\.rs\.main\..+&lt;/string&gt;
              &lt;/parameter&gt;
          &lt;/pdx-serializer&gt;
      &lt;/pdx&gt;
  </code></pre>
  
  <p><strong>Spring XML Namespace</strong></p>
  
  <pre><code>&lt;util:properties id="gemfire-props"&gt;
  &lt;prop key="delta-propagation"&gt;true&lt;/prop&gt;
  &lt;/util:properties&gt;
  &lt;gfe:client-cache pool-name="serverPool" cache-xml-location="classpath:client-cache.xml" properties-ref="gemfire-props"/&gt;
  &lt;gfe:client-region id="delta" pool-name="serverPool" shortcut="PROXY" cloning-enabled="true"&gt;
  </code></pre>
  
  <p><strong>Local gemfire instance version</strong> - pivotal-gemfire-9.0.1</p>
  
  <p><strong>Region Creation</strong>
  Create region –name=delta –type=REPLICATE</p>
  
  <p><strong>Exception:</strong></p>
  
  <pre><code>2017-05-08 22:17:12.370 ERROR 14696 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataAccessResourceFailureException: remote server on 10.148.210.249(:loner):53784:e10627eb: com.gemstone.gemfire.pdx.PdxSerializationException: Could not create an instance of a class com.rs.main.Another; nested exception is com.gemstone.gemfire.cache.client.ServerOperationException: remote server on 10.148.210.249(:loner):53784:e10627eb: com.gemstone.gemfire.pdx.PdxSerializationException: Could not create an instance of a class com.rs.main.Another] with root cause
  
  java.lang.ClassNotFoundException: com.rs.main.Another
      at org.apache.geode.internal.ClassPathLoader.forName(ClassPathLoader.java:437) ~[na:na]
      at org.apache.geode.internal.InternalDataSerializer.getCachedClass(InternalDataSerializer.java:4010) ~[na:na]
      at org.apache.geode.pdx.internal.PdxType.getPdxClass(PdxType.java:235) ~[na:na]
      at org.apache.geode.pdx.internal.PdxReaderImpl.basicGetObject(PdxReaderImpl.java:687) ~[na:na]
      at org.apache.geode.pdx.internal.PdxReaderImpl.getObject(PdxReaderImpl.java:682) ~[na:na]
      at org.apache.geode.internal.InternalDataSerializer.readPdxSerializable(InternalDataSerializer.java:3218) ~[na:na]
      at org.apache.geode.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:3005) ~[na:na]
      at org.apache.geode.DataSerializer.readObject(DataSerializer.java:2897) ~[na:na]
      at org.apache.geode.internal.util.BlobHelper.deserializeBlob(BlobHelper.java:90) ~[na:na]
      at org.apache.geode.internal.cache.EntryEventImpl.deserialize(EntryEventImpl.java:1891) ~[na:na]
      at org.apache.geode.internal.cache.EntryEventImpl.deserialize(EntryEventImpl.java:1884) ~[na:na]
      at org.apache.geode.internal.cache.VMCachedDeserializable.getDeserializedValue(VMCachedDeserializable.java:134) ~[na:na]
      at org.apache.geode.internal.cache.EntryEventImpl.processDeltaBytes(EntryEventImpl.java:1687) ~[na:na]
      at org.apache.geode.internal.cache.EntryEventImpl.setNewValueInRegion(EntryEventImpl.java:1558) ~[na:na]
      at org.apache.geode.internal.cache.EntryEventImpl.putExistingEntry(EntryEventImpl.java:1504) ~[na:na]
      at org.apache.geode.internal.cache.AbstractRegionMap.updateEntry(AbstractRegionMap.java:2959) ~[na:na]
      at org.apache.geode.internal.cache.AbstractRegionMap.basicPut(AbstractRegionMap.java:2782) ~[na:na]
      at org.apache.geode.internal.cache.LocalRegion.virtualPut(LocalRegion.java:5750) ~[na:na]
      at org.apache.geode.internal.cache.DistributedRegion.virtualPut(DistributedRegion.java:337) ~[na:na]
      at org.apache.geode.internal.cache.LocalRegionDataView.putEntry(LocalRegionDataView.java:151) ~[na:na]
      at org.apache.geode.internal.cache.LocalRegion.basicUpdate(LocalRegion.java:5730) ~[na:na]
      at org.apache.geode.internal.cache.LocalRegion.basicBridgePut(LocalRegion.java:5374) ~[na:na]
      at org.apache.geode.internal.cache.tier.sockets.command.Put65.cmdExecute(Put65.java:381) ~[na:na]
      at org.apache.geode.internal.cache.tier.sockets.BaseCommand.execute(BaseCommand.java:141) ~[na:na]
      at org.apache.geode.internal.cache.tier.sockets.ServerConnection.doNormalMsg(ServerConnection.java:776) ~[na:na]
      at org.apache.geode.internal.cache.tier.sockets.ServerConnection.doOneMessage(ServerConnection.java:904) ~[na:na]
      at org.apache.geode.internal.cache.tier.sockets.ServerConnection.run(ServerConnection.java:1160) ~[na:na]
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_121]
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_121]
      at org.apache.geode.internal.cache.tier.sockets.AcceptorImpl$1$1.run(AcceptorImpl.java:519) ~[na:na]
      at java.lang.Thread.run(Thread.java:745) [na:1.8.0_121]
  </code></pre>