当前位置:  开发笔记 > 编程语言 > 正文

Spring-Data JPA CrudRepository返回Iterable,将它转换为List是否可以?

如何解决《Spring-DataJPACrudRepository返回Iterable,将它转换为List是否可以?》经验,为你挑选了3个好方法。

我正在编写一个代码生成工具来使用Spring-Data-Jpa为Spring启动应用程序生成后端连接代码,而且我很温和地告诉我CrudRepository中的方法返回Iterable而不是List,因为iterable不能提供足够的功能,但List,所以我正在寻找将iterable转换为列表的最佳方法.

我看到这篇关于将迭代更改为集合的帖子我想知道,为什么不将它转换为List,而不是使用像Guava这样的库或实现我自己的函数来进行转换?这样做我不知道有什么问题吗?

编辑:我问,因为它是一个代码生成工具,使它生成引入第三方库依赖的代码是不合理的,编写我自己的函数来进行转换也不合理,因为它必须住在某个地方而且我宁愿在生成的代码中没有它.一个简单的演员会有用,如果有点难看,但只是想知道是否有我遗失的东西?



1> Robert Niest..:

你提到过[spring-data-jpa],我猜你使用JPA.在这种情况下,使用JpaRepository而不是像你想要的那样CrudRepository返回方法List.


凉.我现在只看一下文档.JpaRepository扩展了PagingAndSortingRepository,它扩展了扩展Repository的CrudRepository.所以它有点建立在其他人的基础上.整齐.是的,我认为最干净的解决方案是切换到JpaRepository.
这不幸的是总是不起作用. - >例如,当你使用`PagingAndSortingRepository`时,它继承自`CrudRepository`.

2> Andy Wilkins..:

不,我认为没关系.

虽然a List保证是Iterable一个Iterable可能不是一个List.这意味着如果你转换Iterable为a,List它可能会在运行时失败.即使它有效,也不能保证它将来会继续工作,因为它可能会在新版本的Spring Data JPA中发生变化,而不会破坏接口的合同.

您应该声明自己的返回查询方法,而不是使用强制转换List.



3> 小智..:

您的界面仍然可以扩展CrudRepository,您只需添加一个新方法findAll返回一个列表.如下例:

@Repository
public interface DataRepository extends CrudRepository {

    @Override
    List findAll();

}

如果您有一个"抽象"存储库要由所有存储库扩展,您也可以添加此方法,因此它将对您的所有存储库生效.如下例:

@NoRepositoryBean
public interface GenericRepository extends CrudRepository {

    @Override
    List findAll();

}

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有