このコンテンツは選択した言語では利用できません。
Chapter 13. Annotating Objects and Querying
Once indexing has been enabled, custom objects being stored in Red Hat JBoss Data Grid need to be assigned appropriate annotations.
As a basic requirement, all objects required to be indexed must be annotated with
@Indexed
In addition, all fields within the object that will be searched need to be annotated with
@Field
.
Example 13.1. Annotating Objects with @Field
@Indexed public class Person implements Serializable { @Field(store = Store.YES) private String name; @Field(store = Store.YES) private String description; @Field(store = Store.YES) private int age; }
For other annotations and options, see Chapter 14, Mapping Domain Objects to the Index Structure
Important
When using JBoss EAP modules with JBoss Data Grid with the domain model as a module, add the org.infinispan.query dependency with slot "jdg-7.0" into the
module.xml
file. The custom annotations are not picked by the queries without the org.infinispan.query dependency and results in an error.
13.1. Registering a Transformer via Annotations
The key for each value must also be indexed, and the key instance must then be transformed in a String.
Red Hat JBoss Data Grid includes some default transformation routines for encoding common primitives, however to use a custom key you must provide an implementation of
org.infinispan.query.Transformer
.
The following example shows how to annotate your key type using
org.infinispan.query.Transformer
:
Example 13.2. Annotating the Key Type
@Transformable(transformer = CustomTransformer.class) public class CustomKey { } public class CustomTransformer implements Transformer { @Override public Object fromString(String s) { return new CustomKey(...); } @Override public String toString(Object customType) { CustomKey ck = (CustomKey) customType; return ck.toString(); } }
The two methods must implement a biunique correspondence.
For example, for any object A the following must be true:
Example 13.3. Biunique Correspondence
A.equals(transformer.fromString(transformer.toString(A));
This assumes that the transformer is the appropriate Transformer implementation for objects of type A.