带有QueryDSL表达式的存储库模式:为后端创建QueryDSL实现

问题描述 投票:2回答:1

我有一个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过滤器...?

jakarta-ee repository-pattern specifications querydsl
1个回答
1
投票
后代,请看以下内容:

'QuerydslPredicateExecutor' interface (Spring-Data) and 'XXXXExpressions'

© www.soinside.com 2019 - 2024. All rights reserved.