我是 Spring data JPA 的新手,正在尝试了解如何最好地将它与 QueryDSL 结合使用。如果没有 QueryDSL,我将能够使用 @Query 注释在我的 SpringData 接口(interface)中简单地创建任何查询。
为了使用 QueryDSL 获得相同的体验,据我所知,我需要创建自己的自定义存储库实现并让我的 repo 接口(interface)扩展我的自定义实现接口(interface),或者将我所有的 QueryDSL 查询放在服务层包装我的 repo 协议(protocol)。
在第一种情况下,我无法在我的自定义存储库中使用任何 SD 自动生成的方法(例如:findAll(QueryDSL predicate) ),因为我无权访问实际的存储库对象,在第二种情况下如果我将查询逻辑放在服务层而不是 repo 层。
这两种解决方案对我来说都不是特别有吸引力。有没有第三种方法更合适?还是我误解了如何正确使用 QueryDSL 和 Spring Data?
谢谢!
埃里克
最佳答案
可能最方便的方法是让您的存储库接口(interface)简单地扩展 QueryDslPredicateExecutor
,它添加了简单地将 Querydsl Predicate
对象通过管道传输到存储库中并独立或一起执行它们的功能Pageable
和Sort
等。
如果您真的想将谓词组合隐藏到存储库层中(这绝对没问题,但实际上有不同的用途),您可以创建一个单独的存储库实现类,如 here 所述。并使用 QueryDslRepositorySupport
作为基类。在您实现的查找器方法中,您可以只使用基类的 from(...)
、update(...)
和 delete(...)
方法使用 Querydsl 元模型轻松构造和执行查询的类。
关于java - Spring Data JPA 和 QueryDSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13482389/