Веб-дані JPA - виняток "Не знайдено властивості для типу"


126

Ну, я шукав Google і знайшов багато результатів, але жоден з них не зміг відповісти на мою проблему. Отже, ось це йде.

Я намагаюся вивчити Spring MVC та Spring Data JPA, роблячи мінімальну реалізацію клону pinterest. Отже, нижче наведені частини коду, які, на мою думку, мають відношення до моєї проблеми.

Моделі / сутності

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

    // getters and setters...
}

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

    // getters and setters...
}

Сервіс

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

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

    // Other Methods
}

Сховище

public interface UserBoardRepository extends JpaRepository<UserBoard, Integer> {

}

Тепер, коли я називаю findLatestBoardsметод у BoardService, виключення "Немає властивості знайдено" викидається на рядок return boardRepository.findAll(request).getContent();. Ось уривок із журналу tomcat.

ЛОГ ДЕБУГ

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

Виняток

Виняток становить " org.springframework.data.mapping.PropertyReferenceException: No property board found for type com.tecnooc.picpin.model.UserBoard". Але, якщо я правильно зрозумів, властивість boardприсутня в PinItemі правильно відображається mappedBy = "board"в UserBoard.

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

Я не розумію, чому цей виняток кидається. Будь-яка ідея, чому це відбувається?

Примітка. Я використовую сплячку як постачальник стійкості. Крім того, частина коду, яку я вклав тут, - це те, що я вважав, що має значення для проблеми. Якщо це не так, дайте мені знати, і я оновлю питання з необхідною порцією.


2
Я зіткнувся з тією ж проблемою, коли назвав вбудований ідентифікатор як MyCompositePK і спробував написати findByMyCompositePKUserId (Long userId) . Справа в тому, що він повинен бути як у верблюді, так і для сховища CRUD, щоб розрізняти властивості таблиці під час створення запиту з вашого методу. Отже, це має бути MyCompositePk та findByMyCompositePkUserId (Long userId)
— EmeraldTablet

Відповіді:


138

Я зіткнувся з цим самим питанням і знайшов рішення тут: https://dzone.com/articles/persistence-layer-spring-data

Я перейменував власність юридичної особи. Але з Springs Automatic Custom Queries був інтерфейс, визначений для старої назви властивості.

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

Помилка вказала, що він більше не може знайти "OldPropName", і викинув виняток.

Цитувати статтю про DZone:

Коли Spring Data створює нову реалізацію репозиторію, він аналізує всі методи, визначені інтерфейсами, і намагається автоматично генерувати запити з імені методу. Хоча це має обмеження, це дуже потужний та елегантний спосіб визначення нових спеціальних методів доступу з дуже невеликими зусиллями. Наприклад, якщо у керованої сутності є поле імені (і стандартний геттер і сетер Java Bean для цього поля), визначення методу findByName в інтерфейсі DAO автоматично генерує правильний запит:

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

Це порівняно простий приклад; значно більший набір ключових слів підтримується механізмом створення запитів.

У випадку, якщо аналізатор не може співставити властивість з полем об'єкта домену, викидається наступний виняток:

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

86

Ваше ім'я невірно .

Відповідно до документації , якщо ваш сховище є UserBoardRepository, реалізація вашого власного сховища повинна мати ім'я як UserBoardRepositoryImpl, тут ви його назвали як BoardServiceImpl, ось чому він видає виняток.


1
крім того, всі класи / інтерфейси сховища повинні бути розміщені в одному каталозі - наскільки я знаю
— Błażej Kocik

6
Я не знаю, чому настільки обґрунтовано, але в цьому питанні немає спеціального сховища. BoardServiceImplце просто послуга, що використовує UserBoardRepository.
— Дідьє Л

це мій випадок! Я не мав жодних проблем до того, як я переніс заняття Impl у зовсім іншому пакеті, але після цього це сталося. Дякую
— Бакстабу

Це врятувало мені день!
— letimome

47

Виправлено. Під час використання CrudRepositorySpring ми повинні правильно додати ім'я властивості після findBy, інакше це дасть вам виняток "Немає властивостей для типу"

Я отримував цей виняток як. тому що ім'я властивості та назва методу не синхронізувалися.

Я використовував нижче код для доступу до БД.

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

і мій Користувач домену має властивість.

@Entity
public class User implements UserDetails {

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

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

1
Цей підхід мені допоміг - я використав неправильну назву властивості мого класу в методі "за замовчуванням" (надається інтерфейсом CrudRepository) (ieinstea методу findByDateOfStatisticsBetween () я використав метод findByDateBetween () іменування)
— ryzhman

1
приклад findStatusIdнеправильно findByStatusIdправильно і для множинного перевірки імен stackoverflow.com/a/32796493/944593
— Шаріфа

Заощадила мені тону часу. Дякую :).
— Joey587

27

Оскільки ваше сховище JPA - це UserBoardRepository , то ваш власний інтерфейс повинен бути UserBoardRepositoryCustom (він повинен закінчуватися на "Custom"), а назва вашого класу реалізації має бути UserBoardRepositoryImpl (повинен закінчуватися на Impl; ви можете встановити його з іншим постфіксом за допомогою репозиторію- властивість impl-postfix )


17

ця помилка трапляється, якщо ви спробуєте отримати доступ до неіснуючої властивості

я гадаю, що сортування проводиться весною, property nameа не за real column name. а помилка вказує на те, що в "UserBoard"ньому немає властивості, названої "boardId".

звірі,

Дуб


Дякую. Щоб знайти це рішення, мені знадобилося певний час, тому що Весна скаржилася на щось зовсім інше. У мене є клас Aі клас, Bякий розширюється Aі має властивість x. Він скаржився, що не може знайти майно xв класі A...
— GuiRitter

9

У моєму випадку у мене було ім'я друкарської помилки (кейс верблюда). Я назвав це "findbyLastName" і зіткнувся з цим винятком. Після того, як я змінив його на «findByLastName», виняток не було.


1
Зауважте собі: подвійна перевірка! :-)
— lilalinux

8

Зауважте тут: відповіді Зейн XY та Алана Б. Ді досить непогані. Але для тих із вас, хто зараз використовує Spring Boot, і Spring Data, ось що було б більш сучасною відповіддю.

Припустимо, у вас такий клас, як:

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

    private String myClassName;
}

Тепер JpaRepositoryце виглядатиме так

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

Тепер ваша "власна" знахідка за методом повинна бути написана Collection<MyClass> findByMyClassName(String myClassName)саме тому, що Spring повинен мати якийсь механізм для відображення цього методу у MyClassвластивості myClassName!

Я зрозумів це, тому що мені здавалося природним знайти клас за його назвою семантично , тоді як насправді синаксично ви знайдете myClassName

Ура


2

схоже, що назва вашого методу JpaRepository не відповідає жодній змінній у ваших класах сутності. Переконайтесь, що назва вашого методу відповідає змінній у вашому класі сутності

наприклад: ви отримали ім'я змінної під назвою "active", а ваш власний метод JpaRepository каже "findByActiveStatus", і оскільки немає змінної під назвою "activeStatus", вона кине "PropertyReferenceException"



0

У JPA відносини мають одного власника, і, використовуючи mappedByу своєму UserBoardкласі, ви говорите, що PinItemє власником цього двонаправленого відносини, і що властивість у PinItemвідносинах названаboard .

У вашому UserBoardкласі у вас немає полів / властивостей з назвою board, але він має властивістьpinItemList , тому ви можете спробувати використовувати його.


0

Якщо у вашому проекті було використано Spring-Boot, ви можете спробувати додати ці примітки до свого Application.java.

@EnableJpaRepositories(repositoryFactoryBeanClass=CustomRepositoryFactoryBean.class)
@SpringBootApplication

public class Application {.....

0

ви повинні отримати сторінку ,, як це

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


0

У мене була подібна проблема, яка викликала у мене кілька годин головного болю.

Мій метод сховища:

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

Я отримав помилку, що тип властивості не знайдено для типу ResultClass.

Рішення полягало в тому, що jpa / hibernate не підтримує множини? Тим не менш, видалення 's' вирішило проблему:

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

Вибачте, що ви видалили? Ці два рядки виглядають однаково
— Реймонд Чен,

@ user7344209 Я виправив цю помилку. Дивіться назву методу другого зразка коду.
— mirisbowring

Навіть для об'єктів з назвою сутності?
— P Satish Patro

0

Це виняток у мене було недавно, коли я переходив до нової версії весняного завантаження (від 1.5.4 до 1.5.20). Проблема була в структурі пакета репозиторію.

Проблема: Під одним і тим же пакетом були пакунки: сховище, репозиторійCustom та repositoryImpl.

Рішення: Перевпорядкуйте пакети репозиторію, щоб пакет репозиторіїв містив repositoryCustom-пакет і репозиторійCustom-пакет містить repositoryImpl:

сховище 
   |
   ----- сховищеМистка
             |
             ----- сховищеImpl

0

Інший сценарій, який ще не згадувався тут, що спричинив цю помилку, - це API, який отримує Pageable(або Sort) і передає його, як це є, сховищу JPA під час виклику API від Swagger.

Значення за замовчуванням для Pageableпараметра для Swagger таке:

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

Зауважте, що "string"існує властивість, яка існує. Запуск API без його видалення та зміни не спричинитьorg.springframework.data.mapping.PropertyReferenceException: No property string found for type ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.