Spring Data JPA - Exception "Aucune propriété trouvée pour le type"

127

Eh bien, j'ai cherché sur Google et trouvé de nombreux résultats, mais aucun d'entre eux n'a pu répondre à mon problème. Alors, voilà.

J'essaie d'étudier Spring MVC et Spring Data JPA en faisant une implémentation minimale du clone pinterest. Voici donc les parties de code qui, à mon avis, sont pertinentes pour mon problème.

Modèles / Entités

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

Un service

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

Dépôt

public interface UserBoardRepository extends JpaRepository<UserBoard, Integer> {

}

Maintenant, lorsque j'appelle la findLatestBoardsméthode BoardService, l'exception "Aucune propriété trouvée" est lancée sur la ligne return boardRepository.findAll(request).getContent();. Voici l'extrait du journal tomcat.

JOURNAL DE DÉBOGAGE

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

Exception

L'exception est " org.springframework.data.mapping.PropertyReferenceException: No property board found for type com.tecnooc.picpin.model.UserBoard". Mais, si j'ai bien compris, la propriété boardest présente dans PinItemet est correctement mappée avec 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)

Je ne comprends pas pourquoi cette exception est levée. Une idée de pourquoi cela se produit?

Remarque: j'utilise Hibernate comme fournisseur de persistance. En outre, la partie de code que j'ai mise ici est ce que je pensais être pertinente pour le problème. Si ce n'est pas le cas, faites-le moi savoir et je mettrai à jour la question avec la partie requise.

Jomoos
la source
2
J'ai rencontré le même problème lorsque j'avais nommé un ID intégré MyCompositePK et essayé d'écrire findByMyCompositePKUserId (Long userId) . Le fait est qu'il doit également s'agir du cas camel pour le référentiel CRUD, afin de différencier les propriétés de la table lors de la création de la requête à partir de votre méthode. Donc, il doit s'agir de MyCompositePk et findByMyCompositePkUserId (Long userId)
EmeraldTablet

Réponses:

138

J'ai rencontré ce même problème et j'ai trouvé la solution ici: https://dzone.com/articles/persistence-layer-spring-data

J'avais renommé une propriété d'entité. Mais avec les requêtes personnalisées automatiques Springs, une interface était définie pour l'ancien nom de propriété.

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

L'erreur a indiqué qu'il ne pouvait plus trouver "OldPropName" et a levé l'exception.

Pour citer l'article sur DZone:

Lorsque Spring Data crée une nouvelle implémentation de référentiel, il analyse toutes les méthodes définies par les interfaces et tente de générer automatiquement des requêtes à partir du nom de la méthode. Bien que cela ait des limites, c'est un moyen très puissant et élégant de définir de nouvelles méthodes d'accès personnalisées avec très peu d'effort. Par exemple, si l'entité gérée a un champ de nom (et le getter et le setter standard Java Bean pour ce champ), la définition de la méthode findByName dans l'interface DAO générera automatiquement la requête correcte:

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

Ceci est un exemple relativement simple; un ensemble beaucoup plus grand de mots-clés est pris en charge par le mécanisme de création de requêtes.

Dans le cas où l'analyseur ne peut pas faire correspondre la propriété avec le champ d'objet de domaine, l'exception suivante est levée:

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

Votre nom n'est pas correct .

Selon la documentation , si votre référentiel est UserBoardRepository, l'implémentation de votre référentiel personnalisé doit être name as UserBoardRepositoryImpl, ici vous l'avez nommé comme BoardServiceImpl, c'est pourquoi il lève l'exception.

Zane XY
la source
1
de plus, toutes les classes / interfaces du référentiel doivent être placées dans un seul répertoire - pour autant que je sache
Błażej Kocik
6
Je ne sais pas pourquoi cela est autant voté, mais il n'y a pas de référentiel personnalisé impliqué dans cette question. BoardServiceImplest juste un service utilisant le UserBoardRepository.
Didier L
c'est mon cas! Je n'ai eu aucun problème avant de déplacer les classes Impl dans un package complètement différent, mais après cela, cela s'est produit. Merci
Buckstabue
Cela m'a sauvé la journée!
letimome
48

Correction, lors de l'utilisation CrudRepositoryde Spring, nous devons ajouter correctement le nom de propriété après findBy, sinon cela vous donnera l'exception "Aucune propriété trouvée pour le type"

J'obtenais cette exception comme. car le nom de la propriété et le nom de la méthode n'étaient pas synchronisés.

J'ai utilisé le code ci-dessous pour DB Access.

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

et mon utilisateur de domaine a la propriété.

@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
la source
1
Cette approche m'a aidé - j'ai utilisé le nom incorrect d'une propriété de ma classe dans la méthode `` default '' du référentiel (fournie par l'interface CrudRepository) (ieinstea de findByDateOfStatisticsBetween () j'ai utilisé la méthode findByDateBetween () method naming)
ryzhman
1
exemple findStatusIdincorrect findByStatusIdcorrect et pour plusieurs noms, vérifiez stackoverflow.com/a/32796493/944593
shareef
Cela m'a fait gagner beaucoup de temps. Je vous remercie :).
Joey587
27

Étant donné que le nom de votre référentiel JPA est UserBoardRepository , votre nom d'interface personnalisé doit être UserBoardRepositoryCustom (il doit se terminer par `` Custom '') et le nom de votre classe d'implémentation doit être UserBoardRepositoryImpl (doit se terminer par Impl; vous pouvez le définir avec un suffixe différent en utilisant le référentiel- propriété impl-postfix )

Abhilash
la source
17

cette erreur se produit si vous essayez d'accéder à une propriété qui n'existe pas

je suppose que le tri se fait au printemps property nameet non au printemps real column name. et l'erreur indique qu'il "UserBoard"n'y a pas de propriété nommée "boardId".

les meilleurs,

Chêne

chêne
la source
Je vous remercie. Il m'a fallu un certain temps pour trouver cette solution car Spring se plaignait de quelque chose de complètement différent. J'ai une classe Aet une classe Bqui s'étendent Aet ont une propriété x. Il se plaignait de ne pas pouvoir trouver de propriété xen classe A...
GuiRitter
9

Dans mon cas, j'avais une faute de frappe (cas de chameau) dans le nom de ma méthode. Je l'ai nommé "findbyLastName" et j'ai fait face à cette exception. Après que je l'ai changé en "findByLastName", l'exception a disparu.

horizon7
la source
1
Note à moi-même: revérifiez! :-)
lilalinux
8

Remarquez ici: les réponses de Zane XY et Alan B. Dee sont plutôt bonnes. Pourtant, pour ceux d'entre vous qui utiliseraient Spring Boot maintenant et Spring Data, voici ce qui serait une réponse plus moderne.

Supposons que vous ayez une classe telle que:

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

    private String myClassName;
}

Maintenant un JpaRepositorypour cela ressemblerait à

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

Maintenant, votre recherche "personnalisée" par méthode doit être orthographiée Collection<MyClass> findByMyClassName(String myClassName)précisément parce que Spring a besoin d'un mécanisme pour mapper cette méthode sur la MyClasspropriété myClassName!

J'ai compris cela parce que, pour moi, il me semblait naturel trouver une classe par son nom sémantiquement , alors qu'en fait, synatxiquement, vous trouvez par myClassName

À votre santé

avi.elkharrat
la source
2

il semble que le nom de votre méthode JpaRepository personnalisée ne correspond à aucune variable de vos classes d'entité. Assurez-vous que le nom de votre méthode correspond à une variable de votre classe d'entité

par exemple: vous avez un nom de variable appelé "active" et votre méthode JpaRepository personnalisée dit "findByActiveStatus" et comme il n'y a pas de variable appelée "activeStatus", elle lancera "PropertyReferenceException"

bubingaa
la source
1

Veuillez vérifier le nom de la propriété dans l'appel par défaut du référentiel ei repo.findByUsername (nom d'utilisateur)

Shahid Hussain Abbasi
la source
0

Dans JPA, une relation a un seul propriétaire, et en utilisant mappedBydans votre UserBoardclasse, vous indiquez qu'il PinItemest le propriétaire de cette relation bidirectionnelle et que la propriété PinItemde la relation est nomméeboard .

Dans votre UserBoardclasse, vous n'avez aucun champ / propriété avec le nom board, mais il a une propriété pinItemList, vous pouvez donc essayer d'utiliser cette propriété à la place.

Andrei I
la source
0

Si votre projet a utilisé Spring-Boot, vous pouvez essayer d'ajouter ces annotations dans votre Application.java.

@EnableJpaRepositories(repositoryFactoryBeanClass=CustomRepositoryFactoryBean.class)
@SpringBootApplication

public class Application {.....
JACK ZOU
la source
0

vous devriez recevoir une page d'utilisation , comme celle-ci

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

Vous devez avoir cette propriété définie dans votre modèle ou classe d'entité.

Dila Gurung
la source
0

J'ai eu un problème similaire qui m'a causé quelques heures de maux de tête.

Ma méthode de dépôt était:

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

J'ai eu l'erreur, que le type de propriété n'a pas été trouvé pour le type ResultClass.

La solution était que jpa / hibernate ne prend pas en charge les pluriels? Néanmoins, la suppression des 's' a résolu le problème:

public List<ResultClass> findAllByTypeAndObject(String type, List<Object>
mirisbowring
la source
Pardon, qu'est-ce que vous avez supprimé? Ces deux lignes se ressemblent
Raymond Chen
@ user7344209 J'ai corrigé cette erreur. Consultez le nom de la méthode du deuxième exemple de code.
mirisbowring
Même pour les objets de nom d'entité?
P Satish Patro le
0

J'ai eu cette exception récemment lors du passage à une version plus récente à démarrage à ressort (de 1.5.4 à 1.5.20). Le problème était dans la structure du package du référentiel.

Problème: Sous le même package se trouvaient des packages: repository, repositoryCustom et repositoryImpl.

Solution: Réorganisez les packages du référentiel de sorte que le package du référentiel contienne le référentiel Le package personnalisé et le référentiel Le package personnalisé contient le référentielImpl:

dépôt 
   |
   ----- référentiel Personnalisé
             |
             ----- référentielImpl
ognjenkl
la source
0

Un autre scénario, qui n'a pas encore été mentionné ici, qui a causé cette erreur est une API qui la reçoit Pageable(ou Sort) et la transmet, telle quelle, au référentiel JPA lors de l'appel de l'API depuis Swagger.

La valeur par défaut de Swagger pour le Pageableparamètre est la suivante:

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

Remarquez le "string"là qui est une propriété qui existe. L'exécution de l'API sans la supprimer ni la modifier entraîneraorg.springframework.data.mapping.PropertyReferenceException: No property string found for type ...

selalerer
la source