2014-11-21 2 views
8

저는 querydsl을 사용합니다. 따라서 findByName()과 같은 메소드가 필요하지 않으며 모든 저장소 인터페이스가 비어 있습니다.일반 코드가 Spring 데이터와 함께 실패했습니다.

그래서 나는 절전 모드로 매핑 된 엔티티에 많은 클래스가 있기 때문에 빈 메소드와 반복적 인 인터페이스를 피하기 위해 genric 코드를 만들려고합니다.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'genericResposotory': 
Invocation of init method failed; nested exception is 
java.lang.IllegalArgumentException: Not an managed type: class java.lang.Object 

또한 내가 수행하려고 같은 일반적인 저장소를 만들 수있는 방법이되지 않습니다 :

public interface GenericResposotory<T> 
       extends JpaRepository<T, Integer>, QueryDslPredicateExecutor<T> { 

} 

내 서버를 실행이 오류를 얻을?

+0

하는 봄 버전은 당신에있다? –

+0

spring 용 4.0.5.RELEASE와 spring-data-jpa 용 1.6.0.RELEASE를 사용합니다. – Youssef

답변

1

스프링 데이터는 JpaRepository를 확장하는 모든 인터페이스에 대해 Bean을 만들려고합니다. 인터페이스를 표시하지 않는 일종의 기본 저장소가 필요하다면 @NoRepositoryBean

+0

이것을 표시하지만 'autowire field : private repository.GenericRespository'를 얻습니다.'@Autowired를 시도 할 때 \t 개인 GenericRespository region_repository; ' – Youssef

+1

그래, 나는 그 질문을 오해했다. 나는이 인터페이스가 다른 것들을위한 기본이라고 생각하고 다른 인터페이스로 그것을 확장했다. 이 경우 나는 당신이 원하는 것을 성취 할 수 있다고 생각하지 않는다. 일반 인터페이스를 다른 인터페이스로 확장하고 T를 일부 클래스로 설정하기 만하면됩니다. – Nadir

0

Repository은 스프링의 마커 인터페이스이므로 엔티티의 유형을 추출하여 자신의 확장 된 저장소를 찾고 리포지토리를 만드는 데 도움이됩니다 . RepositoryFactorySupport에서 볼 수 있습니다 :

주어진 저장소 인터페이스의 인스턴스를 생성하기위한 factory bean. 구성된 * 리포지토리 인터페이스 을 구현하는 프록시를 만들고이 컨트롤을
QueryExecuterMethodInterceptor에 전달하는 조언을 적용합니다. 쿼리 * 검색 전략은 QueryLookupStrategy.Key를 설정하여 구성된 일 수 있습니다.

그래서 일반적인 저장소를 직접 만들 수는 없습니다.

그러나 RepositoryFactorySupport (JpaRepositoryFactory 구현)을 사용하여 리포지토리를 생성하고이를 상황에 수동으로 넣을 수 있습니다.

또한, 내부 인터페이스와 같은 저장소를 정의하여 프로젝트와 네임 스페이스 오염 파일의 수를 줄일 수 있습니다 : 단지 속성을 추가 아래와 같이

<jpa:repositories base-package="com.pack" consider-nested-repositories="true"/>