Spring Data GemFire provides support to map entities to be stored in a GemFire grid. The mapping metadata is define by using annotations at the domain classes just like this:
Example 8.1. Mapping a domain class to GemFire
@Region("myRegion") public class Person { @Id Long id; String firstname; String lastname; @PersistenceConstructor public Person(String firstname, String lastname) { // … } … }
The first thing you see here is the
@Region annotation that can be used to
customize the region instances of the Person class
are stored in. The @Id annotation can be
used to annotate the property that shall be used as cache key. The
@PersistenceConstructor annotation actually
helps disambiguating multiple potentially available constructors taking
parameters and explicitly marking the one annotated as the one to be used
to create entities. With none or only a single constructor you can omit
the annotation.
Spring Data GemFire provides a custom
PDXSerializer implementation that uses the
mapping information to customize entity serialization. Beyond that it
allows customizing the entity instantiation by using the Spring Data
EntityInstantiator abstraction. By default
the serializer uses a ReflectionEntityInstantiator
that will use the persistence constructor of the mapped entity (either the
single declared one or explicitly annoted with
@PersistenceConstructor). To provide values
for constructor parameters it will read fields with name of the
constructor parameters from the PDXReader
supplied.
Example 8.2. Using @Value on entity constructor parameters
public class Person { public Person(@Value("#root.foo") String firstname, @Value("bean") String lastname) { // … } }
The entity annotated as such will get the field foo
read from the PDXReader and handed as
constructor parameter value for firstname. The value for
lastname will be the Spring bean with name
bean.