如何在Sprint数据+ JPA自定义存储库impl上执行异步查询?

时间:2017-02-23 19:35:15

标签: spring jpa spring-data-jpa

我有这个自定义查询(只是一个简单的例子):

public List<ProdutoEntity> findByDescricaoStartsWithCustom(String desc) {
  String query =
      "SELECT p FROM ProdutoEntity p WHERE p.descricao LIKE CONCAT(UPPER(:descricao),'%') " +
          "AND p.situacao = 'A' ORDER BY p.descricao ASC";

  TypedQuery<ProdutoEntity> tpQuery = em.createQuery(query, ProdutoEntity.class);
  tpQuery.setParameter("descricao", desc);

  return tpQuery.getResultList();
}

如何更改它以返回CompletableFuture并执行异步?

我希望它像这样工作:

public interface ProdutoRepository extends CrudRepository<ProdutoEntity, Integer> {

  @Async
  CompletableFuture<List<ProdutoEntity>> findByDescricaoStartsWith(
      @Param("descricao") String descricao);
}

感谢。

更新:

我这样做了,不确定它是否正确。看起来太简单了。

public CompletableFuture<List<ProdutoEntity>> findByDescricaoStartsWithCustom(String desc) {

  CompletableFuture<List<ProdutoEntity>> cf = CompletableFuture.supplyAsync(() -> {
    String query =
        "SELECT p FROM ProdutoEntity p WHERE p.descricao LIKE CONCAT(UPPER(:descricao),'%') " +
            "AND p.situacao = 'A' ORDER BY p.descricao ASC";

    TypedQuery<ProdutoEntity> tpQuery = em.createQuery(query, ProdutoEntity.class);
    tpQuery.setParameter("descricao", desc);

    return tpQuery.getResultList();
  });

  return cf;
}

0 个答案:

没有答案