source

Spring-Data JPA CrudRepository는 Itable을 반환합니다.목록에 캐스팅해도 될까요?

ittop 2023. 3. 13. 20:51
반응형

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 골랐어요.IterableList.

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

반응형