Jam*_*ler 26 java spring spring-data spring-data-jpa spring-boot
我正在编写一个代码生成工具来使用Spring-Data-Jpa为Spring启动应用程序生成后端连接代码,而且我很温和地告诉我CrudRepository中的方法返回Iterable而不是List,因为iterable不能提供足够的功能,但List,所以我正在寻找将iterable转换为列表的最佳方法.
我看到这篇关于将迭代更改为集合的帖子我想知道,为什么不将它转换为List,而不是使用像Guava这样的库或实现我自己的函数来进行转换?这样做我不知道有什么问题吗?
编辑:我问,因为它是一个代码生成工具,使它生成引入第三方库依赖的代码是不合理的,编写我自己的函数来进行转换也不合理,因为它必须住在某个地方而且我宁愿在生成的代码中没有它.一个简单的演员会有用,如果有点难看,但只是想知道是否有我遗失的东西?
Rob*_*roj 83
你提到过[spring-data-jpa],我猜你使用JPA.在这种情况下,使用JpaRepository而不是像你想要的那样CrudRepository返回方法List.
And*_*son 35
不,我认为没关系.
虽然a List保证是Iterable一个Iterable可能不是一个List.这意味着如果你转换Iterable为a,List它可能会在运行时失败.即使它有效,也不能保证它将来会继续工作,因为它可能会在新版本的Spring Data JPA中发生变化,而不会破坏接口的合同.
您应该声明自己的返回查询方法,而不是使用强制转换List.
Big*_*iga 19
您的界面仍然可以扩展CrudRepository,您只需添加一个新方法findAll返回一个列表.如下例:
@Repository
public interface DataRepository extends CrudRepository<Data, Long> {
@Override
List<Data> findAll();
}
Run Code Online (Sandbox Code Playgroud)
如果您有一个"抽象"存储库要由所有存储库扩展,您也可以添加此方法,因此它将对您的所有存储库生效.如下例:
@NoRepositoryBean
public interface GenericRepository<T> extends CrudRepository<T, Long> {
@Override
List<T> findAll();
}
Run Code Online (Sandbox Code Playgroud)
从 Spring Data 3 开始,还有另一个选项:ListCrudRepository.
这篇博文介绍了为什么CrudRepository选择Iterable而不是List.
https://spring.io/blog/2022/02/22/announcing-listcrudrepository-friends-for-spring-data-3-0
| 归档时间: |
|
| 查看次数: |
34372 次 |
| 最近记录: |