diff --git a/criteria/common/src/org/immutables/criteria/internal/InternalReader.java b/criteria/common/src/org/immutables/criteria/internal/InternalReader.java index 3d0d961d0..2b6e03612 100644 --- a/criteria/common/src/org/immutables/criteria/internal/InternalReader.java +++ b/criteria/common/src/org/immutables/criteria/internal/InternalReader.java @@ -27,14 +27,14 @@ */ public class InternalReader implements Repository.Reader { - private final ImmutableQuery query; + private final ImmutableQuery query; private final Backend backend; - public InternalReader(DocumentCriteria criteria, Backend backend) { - this(ImmutableQuery.of(criteria), backend); + public InternalReader(DocumentCriteria criteria, Class returnType, Backend backend) { + this(ImmutableQuery.of(criteria, returnType), backend); } - private InternalReader(ImmutableQuery query, Backend backend) { + private InternalReader(ImmutableQuery query, Backend backend) { this.query = Objects.requireNonNull(query, "query"); this.backend = Objects.requireNonNull(backend, "backend"); } diff --git a/criteria/common/src/org/immutables/criteria/internal/Query.java b/criteria/common/src/org/immutables/criteria/internal/Query.java index d48511223..e4c4d5bb0 100644 --- a/criteria/common/src/org/immutables/criteria/internal/Query.java +++ b/criteria/common/src/org/immutables/criteria/internal/Query.java @@ -28,10 +28,14 @@ public interface Query extends Backend.Operation { @Value.Parameter - DocumentCriteria criteria(); + DocumentCriteria criteria(); + + @Value.Parameter + Class returnType(); OptionalLong limit(); OptionalLong offset(); + } diff --git a/value-processor/src/org/immutables/value/processor/CriteriaRepository.generator b/value-processor/src/org/immutables/value/processor/CriteriaRepository.generator index 61955b4bd..76a34ac1b 100644 --- a/value-processor/src/org/immutables/value/processor/CriteriaRepository.generator +++ b/value-processor/src/org/immutables/value/processor/CriteriaRepository.generator @@ -57,6 +57,8 @@ import java.util.Objects; [/if] [type.typeDocument.access] class [type.name]Repository implements Repository.Readable<[type.name]> { + private static final Class<[type.name]> ENTITY_CLASS = [type.name].class; + private final Backend backend; public [type.name]Repository(Backend backend) { @@ -65,7 +67,7 @@ import java.util.Objects; @Override public Repository.Reader<[type.name]> find(DocumentCriteria<[type.name]> criteria) { - return new InternalReader<>(criteria, backend); + return new InternalReader<>(criteria, ENTITY_CLASS, backend); } @Override