Spring-Data JPA CrudRepository는 Itable을 반환합니다.목록에 캐스팅해도 될까요?
Spring-Data-Jpa를 사용하여 Spring-Boot 어플리케이션용 백엔드 배선 코드를 생성하기 위한 코드 생성 도구를 작성 중입니다.CrudRepository의 메서드가 List가 아닌 Itable을 반환하는 것은 조금 짜증나지만, List는 충분한 기능을 제공하지 않기 때문에 List로 변환할 수 있는 최선의 방법을 찾고 있습니다..
이 게시물을 보고 Guava와 같은 라이브러리를 사용하거나 변환을 위해 자신의 기능을 구현하지 않고 List에 캐스트하는 것이 어떨까 생각했습니다.제가 모르는 게 잘못된 건가요?
편집: 코드 생성 툴이기 때문에 서드파티 라이브러리에 의존관계를 도입하는 코드를 생성하는 것은 타당하지 않으며, 변환을 위해 자신의 함수를 작성하는 것도 타당하지 않기 때문에 어딘가에 존재해야 하기 때문에 생성된 코드에 그것을 포함하지 않는 것이 좋습니다.심플한 캐스팅은 좀 못생겼지만 제가 놓친 게 있는지 궁금해서요?
말씀하신 대로[spring-data-jpa]
JPA를 쓰시는군요.이 경우 대신 사용CrudRepository
메서드가 반환되는 곳List
네가 원하는 것 같아.
아니, 괜찮지 않을 것 같아.
한편,List
보증은 되어 있습니다.Iterable
한 사람Iterable
가 아닐 수도 있다List
이 말은 만약에 캐스트를 하면Iterable
에 대해서List
런타임에 실패할 수 있습니다.동작한다고 해도, Spring Data JPA의 새로운 버전에서는, 인터페이스의 계약을 위반하지 않고 변경될 가능성이 있기 때문에, 향후에도 계속 동작한다고 하는 보장은 없습니다.
캐스트를 사용하는 대신 반환되는 자체 쿼리 메서드를 선언해야 합니다.List
.
또는 다음을 사용할 수 있습니다.Streamable.of(iterable).toList()
개종한 것에 대해요이 답변에는 다음과 같은 배경도 포함되어 있습니다.Iterable
이러한 메서드의 반환 유형으로 선택되었습니다.
인터페이스는 CrudRepository를 확장할 수 있습니다.새로운 메서드 findAll returning list를 추가하기만 하면 됩니다.다음 예시와 같습니다.
@Repository
public interface DataRepository extends CrudRepository<Data, Long> {
@Override
List<Data> findAll();
}
모든 리포지토리에서 확장해야 하는 "추상" 리포지토리가 있는 경우 이 메서드를 추가하여 모든 리포지토리에 적용할 수 있습니다.다음 예시와 같습니다.
@NoRepositoryBean
public interface GenericRepository<T> extends CrudRepository<T, Long> {
@Override
List<T> findAll();
}
3부터는 Spring Data 의 다른은 스프링 데이터 3입니다.ListCrudRepository
.
이 블로그 투고에서는 그 이유에 대해 설명합니다.CrudRepository
골랐어요.Iterable
List
.
https://spring.io/blog/2022/02/22/announcing-listcrudrepository-friends-for-spring-data-3-0
안녕하세요, 제가 파티에 늦은 건 알지만, 만약 당신이 'Itable'을 'Collection'으로 바꾸고 싶다면 이렇게 하시면 됩니다.
private <T> Collection<T> map(final Iterable<T> iterable) {
return StreamSupport.stream(iterable.spliterator(), false)
.collect(Collectors.toCollection(HashSet::new));
}
그 후 du는 컬렉션에서 .stream().toList();의 목록을 얻을 수 있습니다.도움이 되었으면 좋겠다
단순히 저장소를 CrudRepository가 아닌 JpaRepository로 확장할 수 있습니다.이건 완벽하게 작동될 거야.여기서 findAll은 반복할 수 없는 목록을 반환합니다.
언급URL : https://stackoverflow.com/questions/34702252/spring-data-jpa-crudrepository-returns-iterable-is-it-ok-to-cast-this-to-list
'source' 카테고리의 다른 글
입력 타입="파일"에 이미지를 추가해 같은 형태로 송신한 후 섬네일 이미지를 생성하는 방법 (0) | 2023.03.13 |
---|---|
AngularJS: ngIf를 명령어에 프로그래밍 방식으로 추가하는 베스트 프랙티스는 무엇입니까? (0) | 2023.03.13 |
Ajax 요청 시 Angularjs 로드 화면 (0) | 2023.03.13 |
ExtJS 철학이란?한 페이지 어플리케이션? (0) | 2023.03.13 |
Python에서 Oracle에 액세스하려면 어떻게 해야 합니까? (0) | 2023.03.13 |