java - r2dbc ReactiveCrudRepository 如何编写 JPQL/HQL
问题描述
我是 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?
}
}
我的问题在上面的代码中:
- 如何获取EntityManager?
- 如何从我构建的 HQL 查询中获取 Flux?
当我问这些问题时,我的意思是“如何使用 Spring 反应式/r2dbc 方式执行此操作”,而不是“如何使用 JDBC 执行此正常方式”
解决方案
Spring Data R2DBC 没有像 Hibernate 这样成熟的 ORM 框架支持。因此不存在 EntityManager 之类的东西,也不可能编写 JQL/HQL 查询。
但是,仍然可以使用本机查询来定义更复杂的方法,例如
interface MyRepository extends ReactiveCrudRepository<...> {
@Query("SELECT b from Book b WHERE (VERY COMPLICATED CONDITIONS)")
Flux<...> find(...);
}
推荐阅读
- pandas - Pandas 确实基于字段进行汇总
- python - Jinja2 - 复制变量而不是引用它
- google-app-engine - 是否可以从另一个项目连接到 Google Cloud Memorystore?
- google-sheets - 如何在 Google 表格中选择正确的范围
- angular - 我的 vs 代码中的自动导入为 rxjs 运算符和 CanActivate 接口建议了模棱两可的导入语句
- python - 如何组合来自多个文件的多行并将它们放入数组
- django - 为什么 React 不显示任何数据?
- bash - 一个命令中 bash 中失败的反引号的默认值
- typescript - 在模块内使用模块进行类型声明无法编译(TS2503 找不到命名空间)
- javascript - 目标循环的html属性奇异