SpringData JPA- "유형에 대한 속성 없음"예외


126

글쎄, 나는 Google을 검색하고 많은 결과를 찾았지만 그들 중 누구도 내 문제에 답할 수 없었습니다. 그래서 여기 있습니다.

나는 pinterest clone의 최소한의 구현을 수행하여 Spring MVC 및 Spring Data JPA를 연구하려고합니다. 따라서 다음은 내 문제와 관련이 있다고 생각하는 코드 부분입니다.

모델 / 개체

@Entity
@Table(name = "pin_item")
public class PinItem implements Serializable {
    // properties ...
    @JoinColumn(name = "board_id", referencedColumnName = "user_board_id")
    @ManyToOne(optional = false)
    private UserBoard board;

    // getters and setters...
}

@Entity
@Table(name = "user_board")
public class UserBoard implements Serializable {
    // properties ...
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "board")
    private List<PinItem> pinItemList;

    // getters and setters...
}

서비스

@Service
@Transactional(readOnly = true)
public class BoardServiceImpl implements BoardService {
    @Autowired
    private UserBoardRepository boardRepository;

    @Override
    public List<UserBoard> findLatestBoards() {
        PageRequest request = new PageRequest(
                     0, PresentationUtil.PAGE_SIZE, 
                     Sort.Direction.DESC, "boardId"
        );
        return boardRepository.findAll(request).getContent();
    }

    // Other Methods
}

저장소

public interface UserBoardRepository extends JpaRepository<UserBoard, Integer> {

}

이제에서 findLatestBoards메서드를 호출하면 BoardService"No Property Found"예외가 줄에 발생합니다 return boardRepository.findAll(request).getContent();. 다음은 tomcat 로그에서 발췌 한 것입니다.

디버그 로그

12:28:44,254 DEBUG AnnotationTransactionAttributeSource:106 - Adding transactional method 'findLatestBoards' with attribute: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly; ''
12:28:44,254 DEBUG DefaultListableBeanFactory:246 - Returning cached instance of singleton bean 'transactionManager'
12:28:44,254 DEBUG JpaTransactionManager:366 - Creating new transaction with name [com.tecnooc.picpin.service.impl.BoardServiceImpl.findLatestBoards]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly; ''
12:28:44,254 DEBUG JpaTransactionManager:369 - Opened new EntityManager [org.hibernate.ejb.EntityManagerImpl@75284194] for JPA transaction
12:28:44,255 DEBUG AbstractTransactionImpl:158 - begin
12:28:44,255 DEBUG LogicalConnectionImpl:212 - Obtaining JDBC connection
12:28:44,255 DEBUG DriverManagerDataSource:162 - Creating new JDBC DriverManager Connection to [jdbc:mysql://localhost:3306/pic_pin]
12:28:44,266 DEBUG LogicalConnectionImpl:218 - Obtained JDBC connection
12:28:44,267 DEBUG JdbcTransaction:69 - initial autocommit status: true
12:28:44,267 DEBUG JdbcTransaction:71 - disabling autocommit
12:28:44,267 DEBUG JpaTransactionManager:401 - Exposing JPA transaction as JDBC transaction [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@370da60e]
12:28:44,274 DEBUG TransactionalRepositoryProxyPostProcessor$CustomAnnotationTransactionAttributeSource:286 - Adding transactional method 'findAll' with attribute: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly; ''
12:28:44,274 DEBUG DefaultListableBeanFactory:246 - Returning cached instance of singleton bean 'transactionManager'
12:28:44,274 DEBUG JpaTransactionManager:332 - Found thread-bound EntityManager [org.hibernate.ejb.EntityManagerImpl@75284194] for JPA transaction
12:28:44,274 DEBUG JpaTransactionManager:471 - Participating in existing transaction
12:28:44,279 DEBUG CachedIntrospectionResults:159 - Not strongly caching class [java.io.Serializable] because it is not cache-safe
12:28:44,281 DEBUG JpaTransactionManager:851 - Participating transaction failed - marking existing transaction as rollback-only
12:28:44,281 DEBUG JpaTransactionManager:559 - Setting JPA transaction on EntityManager [org.hibernate.ejb.EntityManagerImpl@75284194] rollback-only
12:28:44,283 DEBUG JpaTransactionManager:844 - Initiating transaction rollback
12:28:44,284 DEBUG JpaTransactionManager:534 - Rolling back JPA transaction on EntityManager [org.hibernate.ejb.EntityManagerImpl@75284194]
12:28:44,284 DEBUG AbstractTransactionImpl:203 - rolling back
12:28:44,284 DEBUG JdbcTransaction:164 - rolled JDBC Connection
12:28:44,285 DEBUG JdbcTransaction:126 - re-enabling autocommit
12:28:44,285 DEBUG JpaTransactionManager:594 - Closing JPA EntityManager [org.hibernate.ejb.EntityManagerImpl@75284194] after transaction
12:28:44,285 DEBUG EntityManagerFactoryUtils:338 - Closing JPA EntityManager
12:28:44,286 DEBUG LogicalConnectionImpl:232 - Releasing JDBC connection
12:28:44,286 DEBUG LogicalConnectionImpl:250 - Released JDBC connection
12:28:44,287 DEBUG ExceptionHandlerExceptionResolver:132 - Resolving exception from handler [public java.lang.String com.tecnooc.picpin.controller.BoardController.latest(javax.servlet.http.HttpSession,org.springframework.ui.Model)]: org.springframework.data.mapping.PropertyReferenceException: No property board found for type com.tecnooc.picpin.model.UserBoard
12:28:44,289 DEBUG ResponseStatusExceptionResolver:132 - Resolving exception from handler [public java.lang.String com.tecnooc.picpin.controller.BoardController.latest(javax.servlet.http.HttpSession,org.springframework.ui.Model)]: org.springframework.data.mapping.PropertyReferenceException: No property board found for type com.tecnooc.picpin.model.UserBoard
12:28:44,290 DEBUG DefaultHandlerExceptionResolver:132 - Resolving exception from handler [public java.lang.String com.tecnooc.picpin.controller.BoardController.latest(javax.servlet.http.HttpSession,org.springframework.ui.Model)]: org.springframework.data.mapping.PropertyReferenceException: No property board found for type com.tecnooc.picpin.model.UserBoard
12:28:44,291 DEBUG DispatcherServlet:959 - Could not complete request

예외

예외는 " org.springframework.data.mapping.PropertyReferenceException: No property board found for type com.tecnooc.picpin.model.UserBoard"입니다. 내가 제대로 이해한다면,이 호텔은 board에 존재 PinItem하고 올바르게 매핑되어 mappedBy = "board"있는 UserBoard.

org.springframework.data.mapping.PropertyReferenceException: No property board found for type com.tecnooc.picpin.model.UserBoard
    at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:75)
    at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:327)
    at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:353)
    at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:307)
    at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:271)
    at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:245)
    at org.springframework.data.jpa.repository.query.QueryUtils.toJpaOrder(QueryUtils.java:408)
    at org.springframework.data.jpa.repository.query.QueryUtils.toOrders(QueryUtils.java:372)
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository.getQuery(SimpleJpaRepository.java:456)
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository.getQuery(SimpleJpaRepository.java:437)
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:319)
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:289)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:333)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:318)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:155)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.data.jpa.repository.support.LockModeRepositoryPostProcessor$LockModePopulatingMethodIntercceptor.invoke(LockModeRepositoryPostProcessor.java:92)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:91)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at com.sun.proxy.$Proxy147.findAll(Unknown Source)
    at com.tecnooc.picpin.service.impl.BoardServiceImpl.findLatestBoards(BoardServiceImpl.java:45)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at com.sun.proxy.$Proxy148.findLatestBoards(Unknown Source)
    at com.tecnooc.picpin.controller.BoardController.latest(BoardController.java:31)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

이 예외가 발생하는 이유를 알 수 없습니다. 왜 그런지 아십니까?

참고 : 저는 Hibernate를 Persistence 제공자로 사용하고 있습니다. 또한 여기에 넣은 코드 부분은 문제와 관련이 있다고 생각하는 부분입니다. 그렇지 않은 경우 알려 주시면 필요한 부분으로 질문을 업데이트하겠습니다.


2
임베디드 ID를 MyCompositePK 로 명명하고 findByMyCompositePKUserId (Long userId) 작성을 시도 했을 때 동일한 문제가 발생했습니다 . 요점은 CRUD 저장소에 대해서도 낙타 케이스 여야하므로 메서드에서 쿼리를 만들 때 테이블 속성을 구분할 수 있습니다. 따라서 MyCompositePkfindByMyCompositePkUserId (Long userId)
EmeraldTablet이어야합니다.

답변:


138

이 같은 문제가 발생하여 여기에서 해결책을 찾았습니다. https://dzone.com/articles/persistence-layer-spring-data

엔티티 속성의 이름을 변경했습니다. 그러나 Springs Automatic Custom Queries에는 이전 속성 이름에 대해 정의 된 인터페이스가있었습니다.

public interface IFooDAO extends JpaRepository< Foo, Long >{
     Foo findByOldPropName( final String name );
}

오류는 더 이상 "OldPropName"을 찾을 수 없음을 나타내며 예외를 발생 시켰습니다.

DZone에 대한 기사를 인용하려면 :

SpringData는 새로운 Repository 구현을 생성 할 때 인터페이스에서 정의한 모든 메소드를 분석하고 메소드 이름에서 자동으로 쿼리를 생성하려고 시도합니다. 여기에는 제한이 있지만 아주 적은 노력으로 새로운 사용자 지정 액세스 방법을 정의하는 매우 강력하고 우아한 방법입니다. 예를 들어, 관리 엔티티에 이름 필드 (및 해당 필드에 대한 Java Bean 표준 getter 및 setter)가있는 경우 DAO 인터페이스에서 findByName 메소드를 정의하면 올바른 쿼리가 자동으로 생성됩니다.

public interface IFooDAO extends JpaRepository< Foo, Long >{
     Foo findByName( final String name );
}

이것은 비교적 간단한 예입니다. 쿼리 생성 메커니즘은 훨씬 더 큰 키워드 집합을 지원합니다.

파서가 도메인 개체 필드와 속성을 일치시킬 수없는 경우 다음 예외가 발생합니다.

java.lang.IllegalArgumentException: No property nam found for type class org.rest.model.Foo

86

이름이 올바르지 않습니다 .

당으로 문서 저장소 인 경우 UserBoardRepository, 사용자 정의 저장소의 구현은 같은 이름이어야 UserBoardRepositoryImpl여기 당신이 그것을 이름, BoardServiceImpl그것은 예외를 throw 이유가.


1
추가로, 모든 저장소 클래스 / 인터페이스는 내가 아는 한 하나의 디렉토리에 위치해야합니다
Błażej Kocik

6
왜 이것이 그렇게 많이 찬성되었는지 모르겠지만이 질문에 관련된 사용자 정의 저장소가 없습니다. BoardServiceImpl을 (를) 사용하는 서비스 UserBoardRepository입니다.
Didier L

그게 내 사건이야! Impl 클래스를 완전히 다른 패키지로 옮기기 전에는 아무런 문제가 없었지만 그 후에 이런 일이 발생했습니다. 감사합니다
Buckstabue

이것은 내 하루를 구했습니다!
letimome

47

수정 됨, CrudRepositorySpring을 사용하는 동안 findBy 뒤에 올바르게 propertyname을 추가해야합니다. 그렇지 않으면 "No Property Found for Type" 예외가 발생합니다.

이 예외가 발생했습니다. 속성 이름과 메서드 이름이 동기화되지 않았기 때문입니다.

DB 액세스를 위해 아래 코드를 사용했습니다.

public interface UserDao extends CrudRepository<User, Long> {
    User findByUsername(String username);

내 도메인 사용자에게는 속성이 있습니다.

@Entity
public class User implements UserDetails {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "userId", nullable = false, updatable = false)
    private Long userId;
    private String username;

1
이 접근 방식이 도움이되었습니다. 저장소의 'default'(CrudRepository 인터페이스에서 제공) 메서드 (예 : findByDateOfStatisticsBetween ()의 instea of ​​findByDateBetween () 메서드 이름 지정)에서 클래스 속성의 잘못된 이름을 사용했습니다.
ryzhman

1
findStatusId잘못된 findByStatusId올바른 예 및 여러 이름 지정 확인 stackoverflow.com/a/32796493/944593
shareef

나를 위해 많은 시간을 절약했습니다. 감사합니다 :).
Joey587

27

JPA 저장소 이름이 UserBoardRepository 이므로 사용자 정의 인터페이스 이름은 UserBoardRepositoryCustom ( 'Custom'으로 끝나야 함)이어야하고 구현 클래스 이름은 UserBoardRepositoryImpl (Impl로 끝나야합니다. 저장소를 사용하여 다른 접미사로 설정할 수 있음)이어야 합니다. impl-postfix 속성)


17

이 오류는 존재하지 않는 속성에 액세스하려고 할 때 발생합니다.

내 생각 엔 정렬은 봄에 의해 이루어 property name지고real column name . 오류는에 "UserBoard"라는 속성이 없음을 나타냅니다 "boardId".

베스트,

오크


감사합니다. Spring이 완전히 다른 것에 대해 불평했기 때문에이 솔루션을 찾는 데 시간이 걸렸습니다. 확장 하고 속성 이있는 클래스 A와 클래스 BA있습니다 x. 그것은 속성을 찾을 수 없다는 불평 x클래스 A...
GuiRitter

9

제 경우에는 메서드 이름에 오타 (낙타 케이스)가 있습니다. 이름을 "findbyLastName"으로 지정하고이 예외에 직면했습니다. "findByLastName"으로 변경 한 후 예외가 사라졌습니다.


1
나 자신에 대한 메모 : 다시 확인하십시오! :-)
lilalinux

8

참고 : Zane XY와 Alan B. Dee의 답변은 상당히 좋습니다. 그러나 지금 Spring Boot와 SpringData를 사용하려는 사람들에게는 더 현대적인 대답이 있습니다.

다음과 같은 클래스가 있다고 가정합니다.

@Entity
class MyClass {
    @Id
    @GeneratedValue
    private Long id;

    private String myClassName;
}

이제 JpaRepository이것은 다음과 같습니다.

interface MyClassRepository extends JpaRepository {
    Collection<MyClass> findByMyClassName(String myClassName);
}

이제 Spring이 속성 에이 메서드를 매핑하기위한 메커니즘이 필요하기 때문에 메서드에 의한 "사용자 지정" 찾기의 철자가 Collection<MyClass> findByMyClassName(String myClassName)정확 해야합니다 !MyClassmyClassName

나에게, 자연스러운 것 같았다 때문에 나는이 아웃 생각 의 이름으로 클래스를 찾을 의미 사실, 반면, synatxically 당신이 myClassName에 의해 발견

건배


2

사용자 정의 JpaRepository 메소드 이름이 엔티티 클래스의 변수와 일치하지 않는 것 같습니다. 메서드 이름이 엔티티 클래스의 변수와 일치하는지 확인

예를 들어 "active"라는 변수 이름이 있고 사용자 정의 JpaRepository 메서드에 "findByActiveStatus"가 표시되며 "activeStatus"라는 변수가 없으므로 "PropertyReferenceException"이 발생합니다.



0

JPA에서 관계에는 단일 소유자가 있으며 클래스 mappedBy에서 를 사용하여 해당 양방향 관계의 소유자이며 관계의 속성 이름이라는 것을 알 수 있습니다.UserBoardPinItemPinItemboard

당신의에 UserBoard클래스 당신은 이름을 가진 필드 / 속성이없는 board, 그러나 그것은 속성이 pinItemList대신 그 속성을 사용하려고 할 수 있도록.


0

프로젝트에서 Spring-Boot를 사용한 경우 Application.java에이 주석을 추가 할 수 있습니다.

@EnableJpaRepositories(repositoryFactoryBeanClass=CustomRepositoryFactoryBean.class)
@SpringBootApplication

public class Application {.....

0

다음과 같은 사용 페이지를 받아야합니다.

 @Override
public Page<UserBoard> findLatestBoards() {
    PageRequest request = new PageRequest(
                 0, PresentationUtil.PAGE_SIZE, 
                 Sort.Direction.DESC, "boardId"
    );
    return boardRepository.findAll(request).getContent();
}

0

모델 또는 엔터티 클래스에 해당 속성이 정의되어 있어야합니다.


0

나는 몇 시간 동안 두통을 일으킨 비슷한 문제가 있었다.

내 저장소 방법은 다음과 같습니다.

public List<ResultClass> findAllByTypeAndObjects(String type, List<Object> objects);

ResultClass 유형에 대한 속성 유형을 찾을 수 없다는 오류가 발생했습니다.

해결책은 jpa / hibernate가 복수형을 지원하지 않는다는 것입니다. 그럼에도 불구하고 's'를 제거하면 문제가 해결되었습니다.

public List<ResultClass> findAllByTypeAndObject(String type, List<Object>

죄송합니다. 무엇을 제거 했습니까? 이 두 줄은 동일하게 보입니다
Raymond Chen

@ user7344209이 실수를 수정했습니다. 두 번째 코드 샘플의 메서드 이름을 참조하십시오.
mirisbowring

엔티티 이름 개체에 대해서도?
P Satish Patro

0

최근에 새로운 스프링 부트 버전 (1.5.4에서 1.5.20으로)으로 이동할 때이 예외가 발생했습니다. 문제는 저장소 패키지 구조에있었습니다.

문제점 : 동일한 패키지 아래에는 repository, repositoryCustom 및 repositoryImpl 패키지가있었습니다.

솔루션 : 저장소 패키지에 repositoryCustom 패키지가 포함되고 repositoryCustom 패키지에 repositoryImpl이 포함되도록 저장소 패키지를 다시 정렬하십시오.

저장소 
   |
   ----- 저장소
             |
             ----- 저장소 Impl

0

여기에 아직 언급되지 않은 또 다른 시나리오는이 오류를 발생 시킨 API로 Swagger에서 API를 호출 할 때 그대로 JPA 저장소로이를 수신 Pageable(또는 Sort)하고 전달하는 것입니다.

Pageable매개 변수의 Swagger 기본값 은 다음과 같습니다.

  {
    "page": 0,
    "size": 0,
    "sort": [
      "string"
    ]
  }

"string"존재하는 속성이 있음을 주목하십시오 . 삭제하거나 변경하지 않고 API를 실행하면org.springframework.data.mapping.PropertyReferenceException: No property string found for type ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.