programing

유형에 대한 속성을 찾을 수 없습니다...커스텀 스프링 데이터 저장소

instargram 2023. 3. 8. 20:35
반응형

유형에 대한 속성을 찾을 수 없습니다...커스텀 스프링 데이터 저장소

커스텀 스프링 저장소를 구현하려고 합니다.인터페이스는 다음과 같습니다.

public interface FilterRepositoryCustom {
    List<User> filterBy(String role);
}

구현:

public class FilterRepositoryImpl implements FilterRepositoryCustom {
...
}

및 "메인" 저장소로 커스텀 저장소를 확장합니다.

public interface UserRepository extends JpaRepository<User, String>, FilterRepositoryCustom {
...
}

Spring Boot을 사용하고 있으며 문서에 따르면 다음과 같습니다.

기본적으로는 Spring Boot은 JPA 저장소 지원을 활성화하고 @Spring Boot Application이 있는 패키지(및 그 서브 패키지)를 검색합니다.

응용 프로그램을 실행하면 다음 오류가 나타납니다.

org.springframework.data.data.disc.PropertyReferenceException:사용자 유형에 대한 속성 filterBy를 찾을 수 없습니다!

여기서의 문제는 작성 중이지만에서 사용하고 있다는 것입니다.이 작업을 수행하려면 작성해야 합니다.

자세한 내용은 이 문서를 참조하십시오.

기본적으로

public interface UserRepositoryCustom {
    List<User> filterBy(String role);
}

public class UserRepositoryImpl implements UserRepositoryCustom {
...
}

public interface UserRepository extends JpaRepository<User, String>, UserRepositoryCustom {
...
}

Spring Data 2.x
이 답변은 Spring 1.x용으로 작성되었습니다.Matt Forsythe가 지적한 와 같이 Spring Data 2.0에서 명명 예상이 변경되었습니다.구현이 에서 변경되었습니다.the-final-repository-interface-name-with-an-additional-Impl-suffix로.the-custom-interface-name-with-an-additional-Impl-suffix.

따라서 이 경우 구현의 이름은 다음과 같습니다.UserRepositoryCustomImpl.

스프링 구성에서 FilterRepositoryCustom의 inclass가 선택되지 않은 경우에도 이 오류가 발생할 수 있습니다.

@EnableJpaRepositories(basePackageClasses = {RepoPackageMarker.class, FilterRepositoryCustomImpl.class})

저도 같은 문제가 있었어요.패키지 구조가 이와 같은지 확인하십시오.

custom
   impl
      - FilterRepositoryCustomImpl.class
- FilterRepositoryCustom.class      

커스텀 리포의 사용을 시도해도 구현이 표시되지 않기 때문입니다.(도입은 스프링에서 확인할 수 있도록 동일한 패키지 또는 하위 패키지에 넣어야 합니다.)

누군가에게 도움이 될지도 몰라(^^^^)

꼭 해야 할 일인가요?customMethod()CustomRepository에는 다음 중 하나의 파라미터만 정의할 수 있습니다.

1. 엔티티 클래스명 -customMethod(User user),

2. 엔티티 클래스의 속성 -customMethod(String firstName)여기서 firstName은 User Entity 클래스의 속성입니다.

커스텀 같은 건 안 돼요?메서드(CustomCriteria 기준), 조건 클래스에는 동적 쿼리를 구성하는 데 사용되는 다양한 속성이 포함됩니다.

예.getStatusByCriteria(CustomCriteria criteria), CustomCriteria@Component로 주석을 단 단순한 pojo로, 봄철에 의해 식별됩니다.

이것을 시도하면, 다음의 에러가 표시됩니다.

org.springframework.data.data.disc.PropertyReferenceException:UserRepository 유형에 대한 속성 기준을 찾을 수 없습니다!

나에게 열쇠는

  1. @EnableJpaRepository(리포지토리 BaseClass = MyRepositoryImpl.class)
  2. 인터페이스의 @NoRepositoryBean 주석

spring ver https://docs.spring.io/spring-data/data-commons/docs/2.3.4.RELEASE/reference/html/ # studiatory 관련 문서를 참조하십시오.

그 결과 다음과 같이 됩니다.

@NoRepositoryBean
public interface SliceRepository<T, ID> extends JpaRepository<T, ID> {..}

public class SliceRepositoryImpl<T, ID> extends SimpleJpaRepository<T, ID> implements SliceRepository<T, ID> {..}


@EnableJpaRepositories(
        entityManagerFactoryRef = "entityManagerFactory",
        basePackages = {"com.some.servicename.repository"},
        repositoryBaseClass = SliceRepositoryImpl.class
)

저도 이 오류가 있었어요.패키지로 ElasticSearch 저장소를 구성했기 때문에 발생했습니다.

@EnableElasticsearchRepositories("some.package")

다음으로 MyElastic Search Repository를 패키지 'some.package'에서 다른 패키지로 이동했지만 구성을 변경하지 않았습니다.

나도 내 프로젝트에서 같은 문제를 겪었어.pom.xml에 행을 추가하여 문제를 해결했습니다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <includes>
            <include>com/my/package/entities/*.java</include>
            <include>com/my/package/repositories/*.java</include>
            <include>com/my/package/repositories/impl/*.java</include> <!-- add this -->
        </includes>
    </configuration>
</plugin>

프래그먼트인터페이스에 대응하는 클래스명의 가장 중요한 부분은 Inpact postfix 입니다.

이전 방식:

Entity aThing = repository.findOne(1L);

새로운 방법:

Optional<Entity> aThing = repository.findById(1L);

언급URL : https://stackoverflow.com/questions/41467894/no-property-found-for-type-custom-spring-data-repository

반응형