Spring Data JPA QueryDslPredicateExecutor查找唯一结果

3

我有一个基于Spring Data和JPA QueryDSL的项目,其中我有许多仓库接口扩展了QueryDslPredicateExecutor,如下所示:

public interface ProductRepository extends JpaRepository<Product, Long>,
    QueryDslPredicateExecutor<Product> {
}

我正在我的应用程序中使用BooleanExpression来执行findAll()查询以获取数据。但是现在我需要根据某个特定的列找到查询结果的不同之处。
在某些情况下,我还使用投影和自定义存储库来选择基于此帖子的特定列。
是否有一种方法可以select distinct,这样我只能基于以上任何方法之一查询特定列的不同值?
2个回答

4
今天我遇到了同样的问题,似乎没有直接的存储库方法来解决它。最终我使用了Querydsl来实现我想要的功能:能够使用Page<T> findAll(Predicate var1, Pageable var2);并使用distinct。一个简单的代码片段:
public Page<LocalizedMessage> findAll(Predicate predicate, Pageable pageable) {
  QMessage qMessage = QMessage.message;

  Querydsl querydsl = new Querydsl(entityManager, new PathBuilder<>(Message.class, qMessage.getMetadata()));
  JPAQuery countQuery = querydsl.createQuery(qMessage).distinct().where(predicate);
  JPAQuery query = querydsl.createQuery(qMessage).distinct().where(predicate);
  querydsl.applyPagination(pageable, query);
  return PageableExecutionUtils.getPage(query.fetch(), pageable, countQuery::fetchCount);
}

这段代码基于QuerydslJpaRepositoryfindAll(Predicate, Pageable)方法。我认为可以很容易地扩展这个仓库,添加findAllDistinct方法,并使用JPQLQuery.distinct()
我已经在spring-data的JIRA上提交了功能请求
希望对某些人有所帮助。

0
如果您直接在存储库中使用 Querydsl 查询,可以调用 query.distinct() 来获取不同的结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接