java - query - pagingandsortingrepository
Spring-Data JPA CrudRepository devuelve Iterable, ¿está bien convertir esto en Lista? (3)
Estoy escribiendo una herramienta de código gen para generar un código de cableado back-end para aplicaciones Spring-boot usando Spring-Data-Jpa y me molesta un poco que los métodos en CrudRepository devuelvan Iterable en lugar de List, ya que iterable no proporciona lo suficiente Funcionalidad, pero List lo hace, así que estoy buscando la mejor manera de convertir lo iterable en una lista.
Vi esta publicación sobre el cambio de un iterable a una colección y me preguntaba, en lugar de usar una biblioteca como Guava o implementar mi propia función para hacer la conversión, ¿por qué no simplemente enviarla a la Lista? ¿Hay algo malo en hacer eso de lo que no sé?
Edición: pregunto porque, dado que es una herramienta de código gen, no es razonable hacer que genere un código que introduzca dependencias en bibliotecas de terceros, y escribir mi propia función para hacer la conversión tampoco es realmente razonable porque tendría que vivir en algún lugar y prefiero no tener eso en el código generado. Un reparto simple funcionará, aunque sea un poco feo, pero solo me pregunté si me falta algo.
No, no creo que esté bien.
Si bien una List
tiene la garantía de ser un Iterable
un Iterable
puede no ser una List
. Esto significa que si Iterable
un Iterable
a una List
puede fallar en el tiempo de ejecución. Incluso si funciona, no hay garantía de que continuará funcionando en el futuro, ya que podría cambiar en las nuevas versiones de Spring Data JPA sin romper el contrato de la interfaz.
En lugar de utilizar una conversión, debe declarar sus propios métodos de consulta que devuelven List
.
Su interfaz aún puede extender CrudRepository , solo puede agregar un nuevo método findAll que devuelva una lista. Como el siguiente ejemplo:
@Repository
public interface DataRepository extends CrudRepository<Data, Long> {
@Override
List<Data> findAll();
}
Si tiene un repositorio "abstracto" que se extenderá a todos sus repositorios, también puede agregar este método, para que tenga efecto en todos sus repositorios. Como el siguiente ejemplo:
@NoRepositoryBean
public interface GenericRepository<T> extends CrudRepository<T, Long> {
@Override
List<T> findAll();
}
Usted mencionó [spring-data-jpa]
así que supongo que usa JPA. En este caso, use JpaRepository
lugar de CrudRepository
donde los métodos devuelven la List
que desee.