我有一个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> { }
我想要存储/搜索我的Resource
对象的ElasticSearch持久性系统,因此我为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过滤器之间的转换......?
答案 0 :(得分:1)
对于后代,请看以下内容:
'QuerydslPredicateExecutor' interface (Spring-Data) and 'XXXXExpressions'