【问题标题】:Why doesn't JpaRepository have a saveAll method in Spring Data Jpa?为什么 JpaRepository 在 Spring Data Jpa 中没有 saveAll 方法?
【发布时间】:2020-04-27 15:22:32
【问题描述】:

我在我的代码中扩展了 JpaRepository,我不能使用 saveAll 方法,即使它在 CrudRepository 中,它由 PagingAndSortingRepository 扩展,而后者又由 JpaRepository 扩展。

当我尝试将方法用作repository.saveAll(someIterable) 时,我的 IDE 找不到它,并且如果我尝试在我的存储库界面中覆盖它,如下所示,我仍然收到错误消息,指出该方法没有覆盖方法来自超类。

@Override
Iterable<MyEntity> saveAll(Iterable<MyEntity> d);

尝试编译显然会产生编译错误。有人知道为什么吗?

【问题讨论】:

  • 它就在那里,就像你说的 - CrudRepository 有它。您不是通过示例扩展其他一些 JpaRepository 吗?
  • 我在这里遇到了同样的问题......你做了什么来解决它?

标签: java spring-data-jpa


【解决方案1】:

saveAll() 未包含在 spring-data-jpa 的 v1 中,直到 2018 年 3 月 2.0.0 版本才进入 Spring Boot。检查您的依赖关系;您可能使用的是旧版本。

【讨论】:

    【解决方案2】:

    JpaRepository 覆盖saveAll() 方法以返回List 而不是Iterable

    CrudRepository:

    <S extends T> Iterable<S> saveAll(Iterable<S> var1);
    

    JpaRepository:

    <S extends T> List<S> saveAll(Iterable<S> entities);
    

    【讨论】:

    • 尝试添加 Override 注释仍然会出错,除非我在存储库中实际键入它(没有注释),否则我无法使用该方法
    • 你能编辑你的问题和更多的代码吗?向我们展示存储库代码和使用它的代码。还有你得到的确切错误。
    • 问题中的代码是存储库中唯一的代码,甚至在签名的开头用 List 替换 Iterable 会给出一个简单的“方法不会覆盖或实现超类型中的方法”编译错误
    • 所以你有public interface MyEntityRepository extends JpaRepository&lt;MyEntity&gt; 并且你在某处注入了MyEntityRepository 并且该引用不允许你调用saveAll?我建议您设置一个显示此行为的测试项目,以便我们可以准确了解发生了什么。
    猜你喜欢
    • 2021-03-16
    • 2023-03-23
    • 2012-12-10
    • 2016-10-11
    • 2019-11-11
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    相关资源
    最近更新 更多