Spring Data JPA: excepción "No se ha encontrado ninguna propiedad para el tipo"

126

Bueno, busqué en Google y encontré muchos resultados, pero ninguno de ellos pudo responder a mi problema. Entonces, aquí va.

Estoy tratando de estudiar Spring MVC y Spring Data JPA haciendo una implementación mínima de clon pinterest. Entonces, a continuación se detallan las partes del código que creo que son relevantes para mi 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...
}

Servicio

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

Repositorio

public interface UserBoardRepository extends JpaRepository<UserBoard, Integer> {

}

Ahora, cuando llamo al findLatestBoardsmétodo BoardService, se lanza la excepción "No se encontró ninguna propiedad" return boardRepository.findAll(request).getContent();. Aquí está el extracto de Tomcat Log.

REGISTRO DE DEPURACIÓN

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

Excepción

La excepción es " org.springframework.data.mapping.PropertyReferenceException: No property board found for type com.tecnooc.picpin.model.UserBoard". Pero, si entendí correctamente, la propiedad boardestá presente en PinItemy está correctamente asignada con 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)

No entiendo por qué se lanza esta excepción. ¿Alguna idea de por qué está sucediendo?

Nota: Estoy usando Hibernate como proveedor de persistencia. Además, la parte del código que puse aquí es lo que pensé que es relevante para el problema. Si no es así, avíseme y actualizaré la pregunta con la parte requerida.

Jomoos
fuente
2
Me encontré con el mismo problema cuando nombré una ID incrustada como MyCompositePK e intenté escribir findByMyCompositePKUserId (Long userId) . El punto es que también debe ser un caso de camello para el repositorio CRUD, para diferenciar entre las propiedades de la tabla al crear la consulta fuera de su método. Entonces, tiene que ser MyCompositePk y findByMyCompositePkUserId (Long userId)
EmeraldTablet

Respuestas:

138

Me encontré con este mismo problema y encontré la solución aquí: https://dzone.com/articles/persistence-layer-spring-data

Cambié el nombre de una propiedad de entidad. Pero con las Consultas personalizadas automáticas de Springs había una interfaz definida para el nombre de la propiedad anterior.

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

El error indicó que ya no podía encontrar "OldPropName" y arrojó la excepción.

Para citar el artículo sobre DZone:

Cuando Spring Data crea una nueva implementación de repositorio, analiza todos los métodos definidos por las interfaces e intenta generar automáticamente consultas a partir del nombre del método. Si bien esto tiene limitaciones, es una forma muy poderosa y elegante de definir nuevos métodos de acceso personalizado con muy poco esfuerzo. Por ejemplo, si la entidad gestionada tiene un campo de nombre (y el getter y setter estándar de Java Bean para ese campo), la definición del método findByName en la interfaz DAO generará automáticamente la consulta correcta:

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

Este es un ejemplo relativamente simple; El mecanismo de creación de consultas admite un conjunto mucho más grande de palabras clave.

En el caso de que el analizador no pueda hacer coincidir la propiedad con el campo del objeto de dominio, se genera la siguiente excepción:

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

Tu nombre no es correcto .

Según la documentación , si su repositorio es UserBoardRepository, la implementación de su repositorio personalizado debe ser un nombre como UserBoardRepositoryImpl, aquí lo nombró como BoardServiceImpl, por eso arroja la excepción.

Zane XY
fuente
1
además, todas las clases / interfaces del repositorio deben colocarse en un directorio, que yo sepa
Błażej Kocik el
66
No sé por qué se vota tanto, pero no hay un repositorio personalizado involucrado en esta pregunta. BoardServiceImples solo un servicio que utiliza el UserBoardRepository.
Didier L
ese es mi caso! No tuve ningún problema antes de mover las clases Impl en un paquete completamente diferente, pero después de eso sucedió. Gracias
Buckstabue
Esto me salvó el día!
letimome
47

Solucionado, al usar CrudRepositorySpring, tenemos que agregar el nombre de propiedad correctamente después de findBy, de lo contrario, le dará la excepción "No se encontró propiedad para el tipo"

Estaba recibiendo esta excepción como. porque el nombre de la propiedad y el nombre del método no estaban sincronizados.

He usado el siguiente código para DB Access.

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

y mi usuario de dominio tiene propiedad.

@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
fuente
1
Este enfoque me ayudó: utilicé el nombre incorrecto de una propiedad de mi clase en el método 'predeterminado' del repositorio (proporcionado por la interfaz CrudRepository) (es decir, en el nombre de método findByDateOfStatisticsBetween () Usé el método findByDateBetween ())
ryzhman
1
ejemplo findStatusIdincorrecto findByStatusIdcorrecto y para verificación de nombres múltiples stackoverflow.com/a/32796493/944593
shareef
Me ahorró un montón de tiempo. Gracias :).
Joey587
27

Como su nombre de repositorio JPA es UserBoardRepository , su nombre de interfaz personalizado debe ser UserBoardRepositoryCustom (debe terminar con 'Custom') y su nombre de clase de implementación debe ser UserBoardRepositoryImpl (debe terminar con Impl; puede configurarlo con un postfix diferente usando el repositorio) propiedad impl-postfix )

Abhilash
fuente
17

este error ocurre si intenta acceder a la propiedad inexistente

Supongo que la clasificación se realiza por primavera property namey no por real column name. y el error indica que "UserBoard"no hay ninguna propiedad nombrada "boardId".

los mejores

Roble

roble
fuente
Gracias. Me tomó un tiempo encontrar esta solución porque Spring se quejaba de algo completamente diferente. Tengo una clase Ay una clase Bque se extiende Ay tengo una propiedad x. Se quejaba de que no podía encontrar propiedades xen clase A...
GuiRitter
9

En mi caso, tuve un error tipográfico (caso de camello) en el nombre de mi método. Lo llamé "findbyLastName" y enfrenté esta excepción. Después de cambiarlo a "findByLastName", la excepción desapareció.

horizon7
fuente
1
Nota para mí: ¡Verificación doble! :-)
lilalinux
8

Nota aquí: las respuestas de Zane XY y Alan B. Dee son bastante buenas. Sin embargo, para aquellos de ustedes que usarían Spring Boot ahora y Spring Data, esta es la respuesta más moderna.

Supongamos que tiene una clase como:

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

    private String myClassName;
}

Ahora un JpaRepositorypara esto se vería así

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

Ahora su búsqueda "personalizada" por método debe deletrearse Collection<MyClass> findByMyClassName(String myClassName)precisamente porque Spring necesita tener algún mecanismo para mapear este método en la MyClasspropiedadmyClassName !

Me di cuenta de esto porque, para mí, parecía natural encontrar una clase por su nombre semánticamente , mientras que, de hecho, sintomáticamente usted encuentre por myClassName

Salud

avi.elkharrat
fuente
2

parece que su nombre de método JpaRepository personalizado no coincide con ninguna Variable en sus clases de entidad. Asegúrese de que el nombre de su método coincida con una variable en su clase de entidad

por ejemplo: tiene un nombre de variable llamado "activo" y su método JpaRepository personalizado dice "findByActiveStatus" y dado que no hay una variable llamada "activeStatus" arrojará "PropertyReferenceException"

bubingaa
fuente
1

Verifique el nombre de la propiedad en la llamada definitiva del repositorio de repositorios.

Shahid Hussain Abbasi
fuente
0

En JPA, una relación tiene un único propietario, y al usar mappedByen su UserBoardclase, usted dice que PinItemes el propietario de esa relación bidireccional, y que PinItemse nombra la propiedad de la relación board.

En su UserBoardclase no tiene ningún campo / propiedad con el nombre board, pero tiene una propiedad pinItemList, por lo que puede intentar usar esa propiedad en su lugar.

Andrei I
fuente
0

Si su proyecto utilizó Spring-Boot, puede intentar agregar estas anotaciones en su Application.java.

@EnableJpaRepositories(repositoryFactoryBeanClass=CustomRepositoryFactoryBean.class)
@SpringBootApplication

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

debería recibir la 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
fuente
0

Debe tener esa propiedad definida en su modelo o clase de entidad.

Dila Gurung
fuente
0

Tuve un problema similar que me causó algunas horas de dolor de cabeza.

Mi método de repositorio fue:

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

Recibí el error de que no se encontró el tipo de propiedad para el tipo ResultClass.

La solución fue que jpa / hibernate no admite plurales. Sin embargo, eliminar la 's' resolvió el problema:

public List<ResultClass> findAllByTypeAndObject(String type, List<Object>
mirisbowring
fuente
Perdón, ¿qué 's' eliminaste? Estas dos líneas se ven iguales
Raymond Chen,
@ user7344209 He corregido este error. Vea el nombre del método del segundo ejemplo de código.
mirisbowring
¿Incluso para el nombre de la entidad Objetos?
P Satish Patro
0

Recientemente tuve esta excepción cuando me mudé a una nueva versión de arranque por resorte (de 1.5.4 a 1.5.20). El problema estaba en la estructura del paquete del repositorio.

Problema: Bajo el mismo paquete había paquetes: repositorio, repositorioCustom y repositorioImpl.

Solución: reorganice los paquetes del repositorio para que el paquete del repositorio contenga el paquete repositoryCustom y el paquete repositoryCustom contenga el repositorioImpl:

repositorio 
   El |
   ----- repositorioCustom
             El |
             ----- repositorioImpl
ognjenkl
fuente
0

Otro escenario, que aún no se mencionó aquí, que causó este error es una API que recibe Pageable(o Sort) y lo pasa, como está, al repositorio JPA cuando se llama a la API desde Swagger.

El valor predeterminado de Swagger para el Pageableparámetro es este:

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

Observe "string"que existe una propiedad que existe. Ejecutar la API sin eliminarla o cambiarla causaráorg.springframework.data.mapping.PropertyReferenceException: No property string found for type ...

sellador
fuente