Spring-Data JPA CrudRepository возвращает Iterable, можно ли привести это к списку?

12

Я пишу инструмент кода-гене для генерации кода подключения для Spring -boot приложений с использованием Spring -Data-Jpa, и это слегка раздражает меня тем, что методы в CrudRepository возвращают Iterable, а не List, как iterable не обеспечивает достаточно функциональности, но List делает, поэтому я ищу лучший способ преобразования iterable в список.

Я видел этот пост об изменении итерации в коллекцию, и мне было интересно, а не использовать библиотеку типа Guava или реализовать мою собственную функцию для преобразования, почему бы просто не перечислить его в список? Что-то не так с этим, о чем я не знаю?

Изменить: Я прошу, потому что, поскольку это инструмент кода-кода, не разумно заставить его генерировать код, который вводит зависимости от сторонних библиотек, а также писать мою собственную функцию для преобразования тоже не очень разумно, потому что ей придется где-то жить, а я скорее всего, не имеет этого в сгенерированном коде. Простое приведение будет работать, если немного уродливое, но просто интересно, есть ли что-то, что мне не хватает?

Теги:
spring-boot
spring
spring-data-jpa
spring-data

2 ответа

17
Лучший ответ

Нет, я не думаю, что все в порядке.

Пока List гарантированно будет Iterable, а Iterable может быть не List. Это означает, что если вы нажмете Iterable на List, он может выйти из строя во время выполнения. Даже если он работает, нет гарантии, что он будет продолжать работать в будущем, поскольку он может измениться в новых версиях Spring Data JPA, не нарушая контракт интерфейса.

Вместо использования броска вы должны объявить свои собственные методы запросов, которые возвращают List.

40

Вы упомянули [spring-data-jpa], поэтому я предполагаю, что вы используете JPA. В этом случае используйте JpaRepository вместо CrudRepository, где методы возвращают List, как вы этого хотите.

  • 5
    Здорово. Я просто взглянул на документацию сейчас. JpaRepository расширяет PagingAndSortingRepository, который расширяет CrudRepository, который расширяет Repository. Так что это как бы опирается на других. Ухоженная. Да, я думаю, что самое чистое решение - перейти на JpaRepository.
  • 0
    Просто и аккуратно.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню