Infinispan Query DSL: quick example
How do you use the Query DSL in Infinispan? How do you search for objects in the in-memory database that have certain properties?
First add the infinispan-query
Maven dependency:
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-query</artifactId>
<version>${infinispan.version}</version>
</dependency>
Then you need to add annotations to the fields that you’d like to index on your object. You can add annotations on both fields and methods:
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Indexed;
@Indexed
public class Worker {
private Address workAddress;
private Address homeAddress;
@Field
public String getHomeAddressLine1() {
return homeAddress.getLine1();
}
}
By default, this field will now be searchable using the property homeAddressLine1
(yes, getter methods are resolved to camelCase names):
QueryFactory qf = Search.getQueryFactory(cache.getCache("yourCacheName"));
Query q = qf.from(Worker.class)
.having("homeAddressLine1").eq("1 High Street")
.or(qf.having("contractType").eq("Full_time"))
.build();
List<Worker> list = q.list();