Spring Data JPA - Ausnahme "Keine Eigenschaft für Typ gefunden"

126

Nun, ich habe Google durchsucht und viele Ergebnisse gefunden, aber keines von ihnen konnte mein Problem beantworten. Also, hier geht es.

Ich versuche, Spring MVC und Spring Data JPA zu studieren, indem ich eine minimale Implementierung des pinterest-Klons durchführe. Im Folgenden sind die Teile des Codes aufgeführt, die meiner Meinung nach für mein Problem relevant sind.

Modelle / Entitäten

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

Bedienung

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

Repository

public interface UserBoardRepository extends JpaRepository<UserBoard, Integer> {

}

Wenn ich jetzt die findLatestBoardsMethode BoardServiceaufrufe, wird die Ausnahme "Keine Eigenschaft gefunden" in der Zeile ausgelöst return boardRepository.findAll(request).getContent();. Hier ist der Auszug aus dem Tomcat-Protokoll.

AUSTESTUNGSPROTOKOLL

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

Ausnahme

Die Ausnahme ist " org.springframework.data.mapping.PropertyReferenceException: No property board found for type com.tecnooc.picpin.model.UserBoard". Aber wenn ich es richtig verstanden habe, ist die Eigenschaft boardin vorhanden PinItemund wird korrekt mit mappedBy = "board"in zugeordnet 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)

Ich verstehe nicht, warum diese Ausnahme ausgelöst wird. Irgendeine Idee, warum es passiert?

Hinweis: Ich verwende den Ruhezustand als Persistenzanbieter. Der Code-Teil, den ich hier eingefügt habe, ist meiner Meinung nach für das Problem relevant. Wenn dies nicht der Fall ist, lassen Sie es mich wissen und ich werde die Frage mit dem erforderlichen Teil aktualisieren.

Jomoos
quelle
2
Ich hatte das gleiche Problem, als ich eine eingebettete ID als MyCompositePK benannt und versucht hatte, findByMyCompositePKUserId (Long userId) zu schreiben . Der Punkt ist, dass es auch für das CRUD-Repository eine Kamel-Groß- / Kleinschreibung sein muss, um beim Erstellen der Abfrage aus Ihrer Methode zwischen den Tabelleneigenschaften zu unterscheiden. Es muss also MyCompositePk und findByMyCompositePkUserId (Long userId) sein
EmeraldTablet

Antworten:

138

Ich bin auf dasselbe Problem gestoßen und habe die Lösung hier gefunden: https://dzone.com/articles/persistence-layer-spring-data

Ich hatte eine Entitätseigenschaft umbenannt. Bei Springs Automatic Custom Queries wurde jedoch eine Schnittstelle für den alten Eigenschaftsnamen definiert.

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

Der Fehler zeigte an, dass "OldPropName" nicht mehr gefunden werden konnte, und löste die Ausnahme aus.

Um den Artikel über DZone zu zitieren:

Wenn Spring Data eine neue Repository-Implementierung erstellt, analysiert es alle von den Schnittstellen definierten Methoden und versucht, automatisch Abfragen aus dem Methodennamen zu generieren. Dies hat zwar Einschränkungen, ist jedoch eine sehr leistungsstarke und elegante Möglichkeit, neue benutzerdefinierte Zugriffsmethoden mit sehr geringem Aufwand zu definieren. Wenn die verwaltete Entität beispielsweise über ein Namensfeld verfügt (und den Java Bean-Standard-Getter und -Setter für dieses Feld), wird beim Definieren der findByName-Methode in der DAO-Schnittstelle automatisch die richtige Abfrage generiert:

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

Dies ist ein relativ einfaches Beispiel. Ein viel größerer Satz von Schlüsselwörtern wird vom Mechanismus zur Erstellung von Abfragen unterstützt.

Für den Fall, dass der Parser die Eigenschaft nicht mit dem Domänenobjektfeld abgleichen kann, wird die folgende Ausnahme ausgelöst:

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

Ihre Benennung ist nicht korrekt .

Gemäß der Dokumentation , wenn Ihr Repository ist UserBoardRepository, sollte die Implementierung des benutzerdefinierten Repository sein Name wie UserBoardRepositoryImpl, hier können Sie es als Namen BoardServiceImpl, deshalb ist es die Ausnahme auslöst.

Zane XY
quelle
1
Außerdem sollten alle Repository-Klassen / Schnittstellen - soweit ich weiß
Błażej Kocik
6
Ich weiß nicht, warum dies so positiv bewertet wird, aber es gibt kein benutzerdefiniertes Repository für diese Frage. BoardServiceImplist nur ein Dienst mit dem UserBoardRepository.
Didier L
das ist mein Fall! Ich hatte kein Problem, bevor ich Impl-Klassen in ein völlig anderes Paket verschoben habe, aber danach geschah dies. Vielen Dank
Buckstabue
Das hat mir den Tag gerettet!
Letimome
46

Behoben: Während der Verwendung CrudRepositoryvon Spring müssen wir den Eigenschaftsnamen nach findBy korrekt anhängen, da sonst die Ausnahme "Keine Eigenschaft für Typ gefunden" angezeigt wird.

Ich bekam diese Ausnahme als. weil Eigenschaftsname und Methodenname nicht synchron waren.

Ich habe den folgenden Code für DB Access verwendet.

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

und mein Domain-Benutzer hat Eigentum.

@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
quelle
1
Dieser Ansatz hat mir geholfen - ich habe den falschen Namen einer Eigenschaft meiner Klasse in der 'Standard'-Methode des Repositorys (bereitgestellt von der CrudRepository-Schnittstelle) verwendet (dh Instea von findByDateOfStatisticsBetween () Ich habe die Benennung der findByDateBetween () -Methode verwendet)
Ryzhman
1
Beispiel findStatusIdfalsch findByStatusIdrichtig und für mehrere Namen überprüfen stackoverflow.com/a/32796493/944593
shareef
Hat mir eine Menge Zeit gespart. Danke :).
Joey587
27

Da Ihr JPA-Repository-Name UserBoardRepository lautet , sollte Ihr benutzerdefinierter Schnittstellenname UserBoardRepositoryCustom (er sollte mit 'Custom' enden) und Ihr Implementierungsklassenname UserBoardRepositoryImpl (sollte mit Impl enden; Sie können ihn mit einem anderen Postfix über das Repository festlegen) festlegen. impl-postfix- Eigenschaft)

Abhilash
quelle
17

Dieser Fehler tritt auf, wenn Sie versuchen, auf nicht vorhandene Eigenschaften zuzugreifen

Ich vermute, dass das Sortieren im Frühjahr nach property nameund nicht nach erfolgt real column name. und der Fehler zeigt an, dass "UserBoard"keine Eigenschaft benannt ist "boardId".

Bests,

Eiche

Eiche
quelle
Danke dir. Ich habe eine Weile gebraucht, um diese Lösung zu finden, weil Spring sich über etwas völlig anderes beschwerte. Ich habe eine Klasse Aund eine Klasse B, die sich erweitert Aund eine Eigenschaft hat x. Es beschwerte sich, dass es keine Immobilie xin der Klasse finden konnte A...
GuiRitter
9

In meinem Fall hatte ich einen Tippfehler (Kamelfall) in meinem Methodennamen. Ich nannte es "findbyLastName" und sah mich dieser Ausnahme gegenüber. Nachdem ich es in "findByLastName" geändert hatte, war die Ausnahme weg.

Horizont7
quelle
1
Hinweis für mich: Überprüfen Sie! :-)
Lilalinux
8

Beachten Sie hier: Die Antworten von Zane XY und Alan B. Dee sind ziemlich gut. Für diejenigen unter Ihnen, die Spring Boot und Spring Data jetzt verwenden würden, ist hier eine modernere Antwort.

Angenommen, Sie haben eine Klasse wie:

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

    private String myClassName;
}

Nun würde ein JpaRepositorydafür aussehen

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

Jetzt muss Ihre "benutzerdefinierte" Methode nach Methode Collection<MyClass> findByMyClassName(String myClassName)genau geschrieben werden , da Spring über einen Mechanismus verfügen muss, um diese Methode auf eine MyClassEigenschaft abzubilden myClassName!

Ich dachte , dies aus , weil ich, ist es natürlich schien eine Klasse durch ihren Namen zu finden semantisch , während in der Tat, synatxically Sie von MyClassName finden

Prost

avi.elkharrat
quelle
2

Es sieht so aus, als ob der Name Ihrer benutzerdefinierten JpaRepository-Methode keiner Variablen in Ihren Entitätsklassen entspricht. Stellen Sie sicher, dass Ihr Methodenname mit einer Variablen in Ihrer Entitätsklasse übereinstimmt

Beispiel: Sie haben einen Variablennamen mit dem Namen "active" und Ihre benutzerdefinierte JpaRepository-Methode sagt "findByActiveStatus". Da es keine Variable mit dem Namen "activeStatus" gibt, wird "PropertyReferenceException" ausgelöst.

bubingaa
quelle
1

Bitte überprüfen Sie den Eigenschaftsnamen im defualt-Aufruf von repo ei repository.findByUsername (Benutzername).

Shahid Hussain Abbasi
quelle
0

In JPA hat eine Beziehung einen einzelnen Eigentümer. Wenn Sie mappedByin Ihrer UserBoardKlasse verwenden, erkennen Sie, dass dies PinItemder Eigentümer dieser bidirektionalen Beziehung ist und dass die Eigenschaft in PinItemder Beziehung benannt ist board.

In Ihrer UserBoardKlasse haben Sie keine Felder / Eigenschaften mit dem Namen board, aber eine Eigenschaft pinItemList. Sie können daher versuchen, diese Eigenschaft stattdessen zu verwenden.

Andrei ich
quelle
0

Wenn Ihr Projekt Spring-Boot verwendet hat, können Sie versuchen, diese Anmerkungen in Ihrer Application.java hinzuzufügen.

@EnableJpaRepositories(repositoryFactoryBeanClass=CustomRepositoryFactoryBean.class)
@SpringBootApplication

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

Sie sollten eine Nutzungsseite , wie diese erhalten

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

Diese Eigenschaft sollte in Ihrem Modell oder Ihrer Entitätsklasse definiert sein.

Dila Gurung
quelle
0

Ich hatte ein ähnliches Problem, das mir einige Stunden Kopfschmerzen bereitete.

Meine Repository-Methode war:

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

Ich habe den Fehler erhalten, dass der Eigenschaftstyp für den Typ ResultClass nicht gefunden wurde.

Die Lösung war, dass jpa / hibernate keine Pluralformen unterstützt? Trotzdem löste das Entfernen der 's' das Problem:

public List<ResultClass> findAllByTypeAndObject(String type, List<Object>
Mirisbowring
quelle
Entschuldigung, was hast du entfernt? Diese beiden Zeilen sehen gleich aus
Raymond Chen
@ user7344209 Ich habe diesen Fehler korrigiert. Siehe den Methodennamen des zweiten Codebeispiels.
Mirisbowring
Auch für Entitätsnamen Objekte?
P Satish Patro
0

Ich hatte diese Ausnahme kürzlich beim Wechsel zu einer neueren Spring-Boot-Version (von 1.5.4 auf 1.5.20). Das Problem lag in der Repository-Paketstruktur.

Problem: Unter demselben Paket befanden sich die Pakete: repository, repositoryCustom und repositoryImpl.

Lösung: Ordnen Sie die Repository-Pakete neu an, sodass das Repository-Paket das repositoryCustom-Paket und das repositoryCustom-Paket repositoryImpl enthält:

Repository 
   |
   ----- repositoryCustom
             |
             ----- repositoryImpl
ognjenkl
quelle
0

Ein anderes Szenario, das hier noch nicht erwähnt wurde und diesen Fehler verursacht hat, ist eine API, die es empfängt Pageable(oder Sort) und es so wie es ist an das JPA-Repository übergibt, wenn die API von Swagger aufgerufen wird.

Der Swagger-Standardwert für den PageableParameter lautet:

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

Beachten Sie das "string"dort, was eine Eigenschaft ist, die existiert. Das Ausführen der API ohne Löschen oder Ändern führt dazuorg.springframework.data.mapping.PropertyReferenceException: No property string found for type ...

Selalerer
quelle