为什么Spring Data Jpa中的JpaRepository没有saveAll方法?

4

我在代码中扩展了JpaRepository,即使它继承了PagingAndSortingRepository,而PagingAndSortingRepository又继承了CrudRepository,我仍然无法使用saveAll方法。

当我尝试使用repository.saveAll(someIterable)时,我的IDE找不到它。如果我尝试在我的repository接口中覆盖它如下所示,我仍然会收到一个错误,说该方法没有覆盖超类的方法。

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

尝试编译时显然会出现编译错误。有人知道原因吗?


就像你说的那样 - CrudRepository 有它。你没有通过示例扩展其他的JpaRepository吗? - Shadov
1
我这里也遇到了同样的问题...你做了什么来解决它? - marcellorvalle
2个回答

4

saveAll() 方法在 spring-data-jpa 的版本1中未被包含,在Spring Boot中也直到2018年3月的 2.0.0 版才包含。请检查您的依赖项,您可能正在使用较旧的版本。


0

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注释仍然会出现错误,除非我在存储库中实际键入该方法(而不使用注释),否则无法使用该方法。 - Filippo De Angelis
你能编辑一下你的问题并附上更多的代码吗?展示一下仓库里的代码和使用它的代码。同时也请提供具体的错误信息。 - Wim Deblauwe
问题中的代码是仓库中唯一的代码,即使在签名开头将Iterable替换为List也会得到一个简单的“方法未覆盖或实现超类型的方法”的编译错误。 - Filippo De Angelis
所以你有一个 public interface MyEntityRepository extends JpaRepository<MyEntity>,并且你在某个地方注入了一个 MyEntityRepository,但是该引用不允许你调用 saveAll?我建议你设置一个测试项目来展示这种行为,这样我们就可以看到具体发生了什么。 - Wim Deblauwe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接