[SPRING] Spring Data JPA로 사용자 정의 저장소를 만들려고 시도 할 때 유형 오류에 대한 속성을 찾을 수 없습니다
SPRINGSpring Data JPA로 사용자 정의 저장소를 만들려고 시도 할 때 유형 오류에 대한 속성을 찾을 수 없습니다
사용자가 업로드 한 파일의 기본 필드가있는 Media 엔터티가 있습니다. 업로드 된 파일의 바이트를 저장하기 위해 해당 기능을 보유하는 사용자 지정 리포지토리를 만들고 싶습니다. Spring 문서의 단계에 따라 다음과 같은 인터페이스를 만들었습니다.
public interface MediaBytesRepository
{
public byte[] getBytes(Media media) throws IOException;
public void saveBytes(Media media, byte[] bytes) throws IOException;
public void appendBytes(Media media, byte[] bytes) throws IOException;
public void deleteBytes(Media media) throws IOException;
public boolean bytesExist(Media media) throws IOException;
}
그런 다음이 인터페이스에 MediaBytesRepositoryImpl이라는 구현을 제공했습니다.
이것으로, 다음 인터페이스를 만들었습니다.
public interface MediaRepository extends JpaRepository<Media, Long>, MediaBytesRepository
{
}
이제 서버를 시작할 때 다음 스택 추적을 얻습니다.
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mediaRepository': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: Could not create query metamodel for method public abstract void com.foo.bar.core.media.MediaBytesRepository.saveBytes(com.foo.bar.core.media.Media,byte[]) throws java.io.IOException!
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:149)
.....
Caused by: java.lang.IllegalArgumentException: Could not create query metamodel for method public abstract void com.foo.bar.core.media.MediaBytesRepository.saveBytes(com.foo.bar.core.media.Media,byte[]) throws java.io.IOException!
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:92)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:162)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:68)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:280)
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:148)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:125)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:41)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142)
... 20 more
Caused by: java.lang.IllegalArgumentException: No property save found for type class com.foo.bar.core.media.Media
at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:73)
at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:92)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:319)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:333)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:301)
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:265)
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:239)
at org.springframework.data.repository.query.parser.Part.<init>(Part.java:70)
at org.springframework.data.repository.query.parser.PartTree$OrPart.<init>(PartTree.java:180)
at org.springframework.data.repository.query.parser.PartTree$Predicate.buildTree(PartTree.java:260)
at org.springframework.data.repository.query.parser.PartTree$Predicate.<init>(PartTree.java:240)
at org.springframework.data.repository.query.parser.PartTree.<init>(PartTree.java:68)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:57)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:90)
... 27 more
이 비슷한 게시물을 찾았지만 거기에있는 제안 (모두 동일한 패키지, 명명 규칙)은 이미 수행하고있는 작업입니다. 내 모든 미디어 클래스와 인터페이스는 동일한 패키지에 있으며 "Impl"접미사를 사용하고 있습니다.
누군가가 왜이 오류가 발생하는지 그리고 어떻게 해결할 수 있는지에 대해 알려주시겠습니까? 감사.
해결법
-
==============================
1.당신이 쓴 :
당신이 쓴 :
아니야.
Media Bytes Repository의 이름을 Media Repository Custom으로 변경하십시오.
물론 MediaRepositoryImpl이라는 이름으로 MediaRepositoryCustom을 구현해야합니다.
-
==============================
2.impl 클래스의 이름을 "InterfaceNameImpl"로 지정해야합니다. 구현을위한 기본 접미사는 Impl이고 우리는 다음과 같이 변경할 수 있습니다.
impl 클래스의 이름을 "InterfaceNameImpl"로 지정해야합니다. 구현을위한 기본 접미사는 Impl이고 우리는 다음과 같이 변경할 수 있습니다.
<repositories base-package="com.acme.repository" repository-impl-postfix="FooBar" />
커스텀 인터페이스의 이름은 중요하지 않습니다.
from https://stackoverflow.com/questions/13945490/no-property-found-for-type-error-when-try-to-create-custom-repository-with-sprin by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 3.0에서 다중 선택 MVC (0) | 2019.01.10 |
---|---|
[SPRING] org.springframework.data.mapping.PropertyReferenceException : 유형에 대한 속성 catch가 없습니다. (0) | 2019.01.10 |
[SPRING] Spring Data JPA Repository에서 save () 후에 반환 된 인스턴스를 사용해야하는 이유는 무엇입니까? (0) | 2019.01.10 |
[SPRING] Spring 데이터 REST 커스텀 질의 통합 (0) | 2019.01.10 |
[SPRING] 프로파일을 이용한 Spring 통합 테스트 (0) | 2019.01.10 |