You are currently browsing legacy 3.0 version of documentation. Click here to switch to the newest 5.0 version.

We can help you with migration to the latest RavenDB

Contact Us Now
see on GitHub

Session: Querying: How to use transformers in queries?

Transformers can be used with session queries using transformWith method.

Syntax

<S> IRavenQueryable<S> transformWith(String transformerName, Class<S> resultClass);

<S> IRavenQueryable<S> transformWith(Class<? extends AbstractTransformerCreationTask> transformerClazz, Class<S> resultClass);
Parameters
transformerName String Name of a transformer to use.
Return Value
IRavenQueryable Instance implementing IRavenQueryable interface containing additional query methods and extensions.

Example I

// return up to 128 entities from 'Products' collection
// transform results using 'Products_Name' transformer
// which returns only 'name' field, rest will be 'null'
QProduct p = QProduct.product;
List<Product> results = session
  .query(Product.class)
  .where(p.name.eq("Chocolade"))
  .transformWith(Products_Name.class, Product.class)
  .toList();

Example II

Loading document inside transformer and projecting results to different type.

public class ProductWithCategoryAndSupplier {
  private String name;
  private Supplier supplier;
  private Category category;

  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public Supplier getSupplier() {
    return supplier;
  }
  public void setSupplier(Supplier supplier) {
    this.supplier = supplier;
  }
  public Category getCategory() {
    return category;
  }
  public void setCategory(Category category) {
    this.category = category;
  }
}

public class Products_WithCategoryAndSupplier extends AbstractTransformerCreationTask {
  public Products_WithCategoryAndSupplier() {
    transformResults = "from product in results               " +
             " select new {                                   " +
             "     Name = product.Name,                       " +
             "     Category = LoadDocument(product.Category), " +
             "     Supplier = LoadDocument(product.Supplier)  " +
             " }";
  }
}

// return 1 entity from 'Products' collection
// transform results using 'Products_WithCategoryAndSupplier' transformer
// project results to 'ProductWithCategoryAndSupplier' class
QProduct p = QProduct.product;
ProductWithCategoryAndSupplier product = session
  .query(Product.class)
  .where(p.name.eq("Chocolade"))
  .transformWith(Products_WithCategoryAndSupplier.class, ProductWithCategoryAndSupplier.class)
  .first();

assertEquals("Chocolade", product.getName());
assertEquals("Confections", product.getCategory().getName());
assertEquals("Zaanse Snoepfabriek", product.getSupplier().getName());