我有一个Repository
界面:
public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID>
{
Iterable<T> findAll(Specification<T>... specifications)
throws RepositorySystemException;
}
我有一个实体类:Resource
,所以我扩展了CrudRepository
:
public interface IResourceRepository extends CrudRepository<Resource, String> { }
我有一个ElasticSearch持久性系统,我想存储/搜索我的Resource
对象,所以我为ElasticSearch创建了一个存储库实现:
public abstract class ElasticsearchRepository<T, ID extends Serializable>
implements CrudRepository<T, ID> { }
然后是
public class ResourceRepository extends ElasticsearchRepository<Resource, String>
implements IResourceRepository
到这里,没有任何臭味。现在,我希望我的存储库能够处理查询或过滤器规范,以便在elasticsearch上进行搜索。
为了做到这一点,我使用QueryDSL
指定表达式:
QResource qr = QResource.resource;
Expression exp = qr.source.sourceId.eq("id").and(qr.channel.endsWith("case"));
我想将此QueryDSL发送到我的findAll(...)
方法存储库,但我不知道该怎么做...
我不知道更改方法签名以接收QueryDSL表达式是否更好,我不知道。但是,我需要在QueryDSL表达式之间转换为具体的ElasticSearch过滤器...?
'QuerydslPredicateExecutor' interface (Spring-Data) and 'XXXXExpressions'