JPA de dados da primavera - exceção "Nenhuma propriedade encontrada para o tipo"

126

Bem, pesquisei no Google e encontrei muitos resultados, mas nenhum deles foi capaz de responder ao meu problema. Então, aqui vai.

Estou tentando estudar o Spring MVC e o Spring Data JPA fazendo uma implementação mínima do clone do pinterest. Então, a seguir estão as partes do código que eu acho relevantes para o meu problema.

Modelos / Entidades

@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...
}

Serviço

@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
}

Repositório

public interface UserBoardRepository extends JpaRepository<UserBoard, Integer> {

}

Agora, quando eu chamo o findLatestBoardsmétodo BoardService, a exceção "Nenhuma propriedade encontrada" é lançada na linha return boardRepository.findAll(request).getContent();. Aqui está o trecho do log do tomcat.

DEBUG LOG

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

Exceção

A exceção é " org.springframework.data.mapping.PropertyReferenceException: No property board found for type com.tecnooc.picpin.model.UserBoard". Mas, se entendi corretamente, a propriedade boardestá presente PinIteme é mapeada corretamente com mappedBy = "board"in 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)

Não entendo por que essa exceção é lançada. Alguma idéia de por que isso está acontecendo?

Nota: Estou usando o Hibernate como provedor de persistência. Além disso, a parte do código que coloquei aqui é o que achei relevante para o problema. Caso contrário, informe-me e atualizarei a pergunta com a parte necessária.

Jomoos
fonte
2
Encontrei o mesmo problema quando nomeei um ID incorporado como MyCompositePK e tentei escrever findByMyCompositePKUserId (Long userId) . O ponto é que ele também precisa ser camel case para o repositório CRUD, para diferenciar as propriedades da tabela ao criar a consulta a partir do seu método. Então, ele tem que ser MyCompositePk e findByMyCompositePkUserId (Long userId)
EmeraldTablet

Respostas:

138

Corri para o mesmo problema e encontrei a solução aqui: https://dzone.com/articles/persistence-layer-spring-data

Eu havia renomeado uma propriedade de entidade. Porém, com as consultas personalizadas automáticas do Springs, havia uma interface definida para o nome da propriedade antiga.

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

O erro indicava que não era mais possível encontrar "OldPropName" e lançou a exceção.

Para citar o artigo no DZone:

Quando o Spring Data cria uma nova implementação do Repositório, ele analisa todos os métodos definidos pelas interfaces e tenta gerar consultas automaticamente a partir do nome do método. Embora isso tenha limitações, é uma maneira muito poderosa e elegante de definir novos métodos de acesso personalizado com muito pouco esforço. Por exemplo, se a entidade gerenciada tiver um campo de nome (e o getter e setter padrão do Java Bean para esse campo), definir o método findByName na interface do DAO gerará automaticamente a consulta correta:

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

Este é um exemplo relativamente simples; um conjunto muito maior de palavras-chave é suportado pelo mecanismo de criação de consultas.

No caso em que o analisador não pode corresponder a propriedade ao campo de objeto do domínio, a seguinte exceção é lançada:

java.lang.IllegalArgumentException: No property nam found for type class org.rest.model.Foo
Alan B. Dee
fonte
86

Sua nomeação não está correta .

De acordo com a documentação , se o seu repositório for UserBoardRepository, a implementação do seu repositório personalizado deve ser UserBoardRepositoryImplnomeada como , aqui você nomeou como BoardServiceImpl, é por isso que lança a exceção.

Zane XY
fonte
1
Além disso, todas as classes de repositório / interfaces devem ser colocados em um diretório - tanto quanto eu sei
Błażej Kocik
6
Não sei por que isso foi tão votado, mas não há repositório personalizado envolvido nesta questão. BoardServiceImplé apenas um serviço usando o UserBoardRepository.
Didier L
esse é o meu caso! Eu não tive nenhum problema antes de mover as classes Impl em um pacote completamente diferente, mas depois disso isso aconteceu. Obrigado
Buckstabue 12/06/19
Isso salvou meu dia!
Letimome 24/07/19
47

Corrigido: ao usar o CrudRepositorySpring, precisamos anexar o nome da propriedade corretamente depois de findBy, caso contrário, a exceção "Nenhuma propriedade encontrada para o tipo" será exibida.

Eu estava recebendo essa exceção como. porque o nome da propriedade e o nome do método não estavam sincronizados.

Eu usei o código abaixo para o DB Access.

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

e meu usuário do domínio tem propriedade.

@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;
Kumar Abhishek
fonte
1
Essa abordagem me ajudou - eu usei o nome incorreto de uma propriedade da minha classe no método 'default' (fornecido pela interface CrudRepository) do repositório (por exemplo, a instância de findByDateOfStatisticsBetween () eu usei o método findByDateBetween ())
ryzhman
1
exemplo findStatusIderrado findByStatusIdcorreta e por múltiplos verificação nomeação stackoverflow.com/a/32796493/944593
shareef
Economizou muito tempo para mim. Obrigado :).
precisa saber é o seguinte
27

Como o nome do repositório JPA é UserBoardRepository , seu nome de interface personalizado deve ser UserBoardRepositoryCustom (deve terminar com 'Custom') e o nome da classe de implementação deve ser UserBoardRepositoryImpl (deve terminar com Impl; você pode configurá-lo com um postfix diferente usando o repositório- propriedade impl-postfix )

Abhilash
fonte
17

esse erro ocorre se você tentar acessar a propriedade inexistente

meu palpite é que a classificação é feita na primavera property namee não na primavera real column name. e o erro indica que, "UserBoard"não há propriedade nomeada "boardId".

melhores

Carvalho

carvalho
fonte
Obrigado. Demorei um pouco para encontrar essa solução porque o Spring estava reclamando de algo completamente diferente. Eu tenho uma classe Ae uma classe Bque se estende Ae tem uma propriedadex . Ele estava reclamando que não poderia encontrar propriedades xna classe A...
GuiRitter
9

No meu caso, tive um erro de digitação (caso camel) no nome do meu método. Eu o nomeei "findbyLastName" e enfrentei essa exceção. Depois que eu mudei para "findByLastName", a exceção desapareceu.

horizon7
fonte
1
Nota para mim mesmo: verifique! :-)
lilalinux 26/08/19
8

Observe aqui: as respostas de Zane XY e Alan B. Dee são bastante boas. No entanto, para aqueles de vocês que usariam o Spring Boot agora e o Spring Data, aqui está uma resposta mais moderna.

Suponha que você tenha uma classe como:

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

    private String myClassName;
}

Agora um JpaRepositorypara isso seria semelhante

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

Agora, sua localização "personalizada" por método deve ser escrita Collection<MyClass> findByMyClassName(String myClassName)precisamente porque o Spring precisa ter algum mecanismo para mapear esse método na MyClasspropriedademyClassName !

Eu descobri isso porque, para mim, parecia natural encontrar uma classe por seu nome semântica , enquanto na verdade, sinaticamente , você encontra por myClassName

Felicidades

avi.elkharrat
fonte
2

parece que o nome do método JpaRepository personalizado não corresponde a nenhuma variável nas classes de entidade. Verifique se o nome do método corresponde a uma variável na sua classe de entidade

por exemplo: você recebeu um nome de variável chamado "active" e seu método JpaRepository personalizado diz "findByActiveStatus" e, como não existe uma variável chamada "activeStatus", ele lançará "PropertyReferenceException"

bubingaa
fonte
1

Verifique o nome da propriedade na chamada padrão do repositório ei repository.findByUsername (nome de usuário)

Shahid Hussain Abbasi
fonte
0

Na JPA, um relacionamento tem um único proprietário e, ao usar mappedByem sua UserBoardclasse, você diz que PinItemé o proprietário desse relacionamento bidirecional e que a propriedade no PinItemrelacionamento é denominadaboard .

Na sua UserBoardclasse, você não possui nenhum campo / propriedade com o nome board, mas ele possui uma propriedade pinItemList; portanto, você pode tentar usar essa propriedade.

Andrei I
fonte
0

Se o seu projeto usou o Spring-Boot, você pode tentar adicionar essas anotações no seu Application.java.

@EnableJpaRepositories(repositoryFactoryBeanClass=CustomRepositoryFactoryBean.class)
@SpringBootApplication

public class Application {.....
JACK ZOU
fonte
0

você deve receber a página de uso , como esta

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

Você deve ter essa propriedade definida em seu modelo ou classe de entidade.

Dila Gurung
fonte
0

Eu tive um problema semelhante que me causou algumas horas de dor de cabeça.

Meu método de repositório foi:

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

Eu recebi o erro de que o tipo de propriedade não foi encontrado para o tipo ResultClass.

A solução foi que jpa / hibernate não suporta plurais? No entanto, remover os 's' resolveu o problema:

public List<ResultClass> findAllByTypeAndObject(String type, List<Object>
mirisbowring
fonte
Desculpe, o que você removeu? Essas duas linhas parecem iguais
Raymond Chen
@ user7344209 Corrigi este erro. Veja o nome do método do segundo exemplo de código.
mirisbowring
Mesmo para o nome da entidade Objetos?
P Satish Patro
0

Recentemente, tive essa exceção ao passar para uma versão mais recente do boot por mola (de 1.5.4 a 1.5.20). O problema estava na estrutura do pacote do repositório.

Problema: No mesmo pacote estavam os pacotes: repository, repositoryCustom e repositoryImpl.

Solução: Reorganize os pacotes de repositório para que o pacote de repositório contenha o pacote repositoryCustom e o pacote repositoryCustom contenha repositoryImpl:

repositório 
   |
   ----- repositoryCustom
             |
             ----- repositoryImpl
ognjenkl
fonte
0

Outro cenário, que ainda não foi mencionado aqui, que causou esse erro é uma API que recebe Pageable(ou Sort) e a passa, como é, ao repositório JPA ao chamar a API do Swagger.

O valor padrão do Swagger para o Pageableparâmetro é este:

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

Observe o "string"que é uma propriedade que existe. A execução da API sem excluí-la ou alterá-la fará com queorg.springframework.data.mapping.PropertyReferenceException: No property string found for type ...

selalerer
fonte