gpt4 book ai didi

java - Spring Data JPA createCountQueryFor 替换?

转载 作者:行者123 更新时间:2023-12-02 05:15:41 26 4
gpt4 key购买 nike

我有一个抽象存储库类,在其中计算一个 hibernate 查询(作为字符串),并且对于这个字符串,我还必须创建一个计数查询。直到最近,我一直在使用 QueryUtils.createCountQueryFor(String),它在较新版本的 spring-data-jpa 中被标记为已弃用。

他们的解决方案是使用DeclaredQuery.deriveCountQuery(String, String)。然而 DeclaredQuery 及其所有实现子类没有公共(public)标识符,因此不能在其包之外使用。

我有哪些解决方案(使用 spring-data-jpa)来从选择查询创建计数查询,而不使用此已弃用的方法?

最佳答案

我认为这些情况的最佳答案是直接进入代码。

DeclaredQuery 的唯一实现是 StringQueryEmptyDeclaredQuery 。如果我们检查 StringQuery (对于最新分支,当前为 2.1.x),它是唯一计算计数查询的内部成员,就像您需要的那样:

@Override
@SuppressWarnings("deprecation")
public DeclaredQuery deriveCountQuery(@Nullable String countQuery, @Nullable String countQueryProjection) {

return DeclaredQuery
.of(countQuery != null ? countQuery : QueryUtils.createCountQueryFor(
query, countQueryProjection));
}

但是正如您所看到的,此类仍然使用已弃用的 QueryUtils.createCountQueryFor() 方法(请注意方法签名中的 @SuppressWarnings("deprecation") )这告诉我们,即使是 spring-data-jpa 的合作者也没有其他选择。因此,我将在此期间继续使用已弃用的方法,并密切关注该实现,以寻找即将发布的版本中的替代方法。

顺便说一句,DeclaredQuery 不是公共(public)成员这一事实告诉我们,它不是公共(public) API 的一部分,因此不应使用它。我理解您对计数查询的需求,但前段时间我发现自己遇到了类似的情况 - 在这种情况下,我们最终实现了自己版本的计数查询。

关于java - Spring Data JPA createCountQueryFor 替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56295556/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com