Property Annotations
The GigaSpaces API supports field-level decorations with PONOs. These can be specified via annotations on the space class source itself. The annotations are defined on the getter methods.
SpaceId
Syntax | SpaceId AutoGenerate |
Argument | boolean |
Default | false |
Description | Defines whether this field value is used when generating the Object ID. The field value should be unique – i.e., no multiple objects with the same value should be written into the space (each object should have a different field value). When writing an object into the space with an existing id field value, an EntryAlreadyInSpaceException is thrown. The Object ID is created, based on the id field value.Specifies if the object ID is generated automatically by the space when written into the space. If false , the field is indexed automatically, and if true , the field isn't indexed. If autoGenerate is declared as false , the field is indexed automatically. If autoGenerate is declared as true , the field isn't indexed. If AutoGenerate is true , the field must be of the type String . |
Example:
[SpaceClass]
public class Person {
[SpaceId(AutoGenerate=false)]
public long? Id {set; get;}
}
SpaceRouting
Syntax | SpaceRouting |
Description | The [SpaceRouting] annotation specifies a get method for the field to be used to calculate the target space for the space operation (Read , Write...). The [SpaceRouting] field value hash code is used to calculate the target space when the space is running in partitioned mode. |
Example:
[SpaceClass]
public class Employee {
[SpaceId]
[SpaceRouting]
public long DepartmentId {set; get}
}
Data Partitioning
SpaceProperty
Syntax | SpaceProperty NullValue |
Argument | nullValue |
Default | null |
Description | Specifies that a property value be treated as null when the object is written to the space and no value is assigned to the attribute. (where -1 functions as a null value in case of an int) |
Example:
[SpaceClass]
public class Employee {
[SpaceProperty(NullValue="-1")]
public int Age {set; get;}
}
}
SpaceIndex
Syntax | SpaceIndex Type |
Argument | SpaceIndexType |
Description | Querying indexed fields speeds up read and take operations. The [SpaceIndex] annotation should be used to specify an indexed field. |
Example:
[SpaceClass]
public class User {
[SpaceIndex(Type = SpaceIndexType.Basic)]
public String Name {set; get;}
[SpaceIndex(Type = SpaceIndexType.Extended)]
public double Balance{set; get;}
}
Unique Index
Syntax | SpaceIndex Type, Unique |
Argument | SpaceIndexType |
Description | Unique constraints can be defined for an attribute or attributes of a space class. |
Note | The uniqueness is enforced per partition and not over the whole cluster. |
Example:
[SpaceClass]
public class Person
{
[SpaceIndex(Type=SpaceIndexType.Basic, Unique=true)]
public String LastName{ get; set; }
}
SpaceIndex Path
Syntax | SpaceIndex Path ,Type |
Argument | SpaceIndexType |
Description | The path() attribute represents the path of the indexed property within a nested object. |
Example:
[SpaceClass]
public class Person {
[SpaceIndex(Path = "SocialSecurity", Type = SpaceIndexType.Extended)]
public Info PersonalInfo{ get; set; }
}
public class Info : Serializable {
public String Name { get; set; }
public Address Address{ get; set; }
public Date Birthday { get; set; }
public long SocialSecurity{ get; set; }
}
SpaceVersion
Syntax | SpaceVersion |
Description | This annotation is used for object versioning used for optimistic locking. |
Note | The attribute must be an int data type. |
Example:
[SpaceClass]
public class Employee {
[SpaceVersion]
public int Version { get; set; }
}
SpacePersist
Syntax | SpacePersist |
Description | This specifies a getter method for holding the persistency mode of the object overriding the class level persist declaration. This field should be of the boolean data type. If the persist class level annotation is true, all objects of this class type will be persisted into the underlying data store (Mirror, ExternalDataSource, Storage Adapter). |
Note | When using this option, you must have the space class level persist decoration specified. |
Example:
[SpaceClass(Persist=true)
public class Employee {
[SpacePersist]
public Bool Persist{ get; set; }
}
SpaceExclude
Syntax | SpaceExclude |
Description | When this annotation is specified the attribute is not written into the space. |
Example:
[SpaceClass]
public class Employee {
[SpaceExclude]
public String MothersName{ get; set; }
}
SpaceStorageType
Syntax | SpaceStorageType StorageType |
Argument | StorageType |
Default | StorageType.Object |
Description | This annotation is used to specify how the attribute is stored in the space. |
Example:
[SpaceClass]
public class Message {
[SpaceStorageType(storageType=StorageType.BINARY)]
public String PayLoad{ get; set; }
}
SpaceFifoGroupingProperty
Syntax | SpaceFifoGroupingProperty Path |
Argument | path |
Description | This annotation is used to define a space FIFO grouping property. |
Note | If defined, the TakeModifiers.FIFO_GROUPING_POLL or ReadModifiers.FIFO_GROUPING_POLL modifiers can be used to return all space entries that match the selection template in FIFO order. Different values of the FG property define groups of space entries that match each value. FIFO ordering exists within each group and not between different groups. |
Example:
[SpaceClass]
public class FlightReservation
{
[SpaceFifoGroupingProperty(Path = "FlightNumber")]
public FlightInfo Info { get; set; }
}
SpaceFifoGroupingIndex
Syntax | SpaceFifoGroupingIndex Path |
Description | This annotation is used to define a space FIFO grouping Index. |
Note | This annotation can be declared on several properties in a class in order to assist in efficient traversal. If defined, there must be a property in the class, marked with the [SpaceFifoGroupingProperty] annotation.A compound index that contains this FIFO grouping index and the FIFO grouping property will be created. |
Example:
[SpaceFifoGroupingIndex]
public State ProcessingState { get; set; }
[SpaceFifoGroupingIndex(Path = "Id")]
public Person Customer { get; set; }
SpaceDynamicProperties
Syntax | SpaceDynamicProperties |
Description | Allows adding properties freely to a class without worrying about the schema. |
Note | Only one property per class can be annotated with [SpaceDynamicProperties] .
|
Example:
[SpaceClass]
public class Person {
public String Name { get; set; }
[SpaceDynamicProperties]
public DocumentProperties ExtraInfo { get; set; }
}
Alias Name
Syntax | AliasName |
Description | In some cases, usually in interoperability scenarios, you may need to map your C# properties to different names in the Space. You can do that using the AliasName property on [SpaceProperty]. |
Note | When using space SqlQuery on an object with properties which are aliased, the query text needs to use the aliased property names. For more information about SqlQuery, see GigaSpaces.NET - Sql Query. |
Example:
[SpaceClass]
public class Person {
[SpaceProperty(AliasName="firstName")]
public String FirstName {set; get;}
}