5

我是 Spring data JPA 的新手,正在尝试了解如何最好地将它与 QueryDSL 一起使用。如果没有 QueryDSL,我将能够使用 @Query 注释在 SpringData 接口中简单地创建任何查询。

为了获得使用 QueryDSL 的相同体验,据我所知,我需要创建自己的自定义存储库实现并让我的 repo 接口扩展我的自定义实现接口,或者将所有 QueryDSL 查询放在包装我的 repo 的服务层.

在第一种情况下,我无法在自定义 repo 中使用任何 SD 自动生成的方法(例如: findAll(QueryDSL predicate) ),因为我无法访问实际的 repo 对象,而在第二种情况下,我是将查询逻辑放在服务层而不是回购层。

这两种解决方案对我来说都不是特别有吸引力。有没有更合适的第三种方式?还是我误解了如何正确使用 QueryDSL 和 Spring Data?

谢谢!

埃里克

4

1 回答 1

10

可能最方便的方法是让您的存储库接口简单地扩展QueryDslPredicateExecutor,这增加了将 Querydsl 对象简单地通过管道传输到存储库并Predicate独立或并行执行它们等的能力。PageableSort

如果您真的想将谓词的组合隐藏到存储库层中(这绝对没问题,但实际上用于不同的目的),您可以按照此处所述创建一个单独的存储库实现类并QueryDslRepositorySupport用作基类。然后,在您实现的查找器方法中,您可以使用基类的from(…)update(…)delete(…)方法轻松地使用 Querydsl 元模型构造和执行查询。

于 2012-11-22T07:18:53.187 回答