【问题标题】:Spring Data JPA and QueryDSLSpring Data JPA 和 QueryDSL
【发布时间】:2012-11-09 01:29:52
【问题描述】:

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

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

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

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

谢谢!

埃里克

【问题讨论】:

    标签: java spring-data querydsl


    【解决方案1】:

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

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

    【讨论】:

    • 问题不是hiding the combination of predicates into the repository,对我来说,它是关于在我的查询中添加group by 和...并执行它们,只有谓词似乎不接近那个
    • 不幸的是,QueryDslPredicateExecutor 不允许使用groupBy 等。只有查询的where 部分。这往往是不够的。但是以QueryDslRepositorySupport 作为基类的自定义存储库 impl 真的很棒!
    • @azerafati,看看github.com/infobip/infobip-spring-data-jpa-querydsl,它可能就是你要找的东西。
    猜你喜欢
    • 2020-06-16
    • 2016-02-17
    • 1970-01-01
    • 2014-03-29
    • 2020-08-18
    • 2011-12-25
    • 2016-05-27
    • 1970-01-01
    • 2020-01-12
    相关资源
    最近更新 更多