springframework query pagingandsortingrepository org jparepository data crudrepository java spring spring-boot spring-data spring-data-jpa

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.