【问题标题】:r2dbc ReactiveCrudRepository how to write JPQL/HQLr2dbc ReactiveCrudRepository 如何编写 JPQL/HQL
【发布时间】:2021-05-03 04:00:31
【问题描述】:

我是 Spring WebFlux 反应式的新手。我使用 R2DBC postgresql。我有一个这样的存储库:

public interface BookRepository extends ReactiveCrudRepository<Book, Long> {
}

现在我想添加自定义方法来查询许多复杂的条件:

public interface CustomBookRepository extends BookRepository {
    Flux<Book> findByVeryComplicatedCondition(MyCriteriaDto criteria);
}

我的实现:

public class CustomBookRepositoryImpl extends CustomBookRepository {

    //How to get it?
    EntityManager em;

    @Override
    public Flux<Book> findByVeryComplicatedCondition(MyCriteriaDto criteria) {
        Query query = em.createQuery("SELECT b from Book b WHERE (VERY COMPLICATED CONDITIONS)");
        //What next?
    }
}

我的问题在上面的代码中:

  1. 如何获取EntityManager?
  2. 如何从我构建的 HQL 查询中获取 Flux?

当我问这些问题时,我的意思是“如何使用 Spring 反应式/r2dbc 方式做到这一点”,而不是“如何使用 JDBC 做到这一点”

【问题讨论】:

  • 在您在这里提问之前,您是否阅读过 spring R2DBC 的文档?
  • 正如我所提到的,我是 Spring WebFlux 的新手。我已经阅读了一些文档,但它们是关于 R2DBC MongoDB 的。我找不到任何关于自定义 HQL 的资源
  • 好吧,如果你真的查了一下HQL是什么,它代表Hibernate Query Language,而R2DBC不支持Hibernate,如果你google R2DBC和Hibernate,这很容易google。此外,如果您使用 google R2DBC documentation,您将被带到官方文档,在那里您可以阅读有关它支持的内容以及您可以做什么和不可以做什么的所有信息。 meta.stackoverflow.com/questions/261592/…
  • 你是新手,并不代表你不能看文档,相反,当你是新手时,你应该先看文档,然后再问。
  • 如果我不能使用 HQL,你能建议我另一种支持查询复杂条件的机制吗?

标签: java hibernate spring-webflux spring-data-r2dbc


【解决方案1】:

Spring Data R2DBC 没有像 Hibernate 这样成熟的 ORM 框架支持。因此没有 EntityManager 之类的东西,也不可能编写 JQL/HQL 查询。

但是,仍然可以使用原生查询来定义更复杂的方法,例如

interface MyRepository extends ReactiveCrudRepository<...> {

    @Query("SELECT b from Book b WHERE (VERY COMPLICATED CONDITIONS)")
    Flux<...> find(...);
}

【讨论】:

  • 嗨,Ferten,我的情况不仅仅是关于 \@Query。我需要根据用户输入编写自定义查询语句,所以 \@Query 在这里没有运气:(
猜你喜欢
  • 2023-03-26
  • 2020-06-21
  • 2017-07-27
  • 2016-01-17
  • 1970-01-01
  • 2011-02-20
  • 2011-02-24
  • 2012-05-02
  • 1970-01-01
相关资源
最近更新 更多