Spring Data JPA - Pengecualian "Properti Tidak Ditemukan untuk Jenis"


127

Ya, saya mencari di Google dan menemukan banyak hasil, tetapi tidak satupun dari mereka dapat menjawab masalah saya. Jadi, ini dia.

Saya mencoba mempelajari Spring MVC dan Spring Data JPA dengan melakukan implementasi minimal pinterest clone. Jadi, berikut adalah bagian-bagian kode yang menurut saya relevan dengan masalah saya.

Model / Entitas

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

Layanan

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

Gudang

public interface UserBoardRepository extends JpaRepository<UserBoard, Integer> {

}

Sekarang, ketika saya memanggil findLatestBoardsmetode ini BoardService, pengecualian "Tidak Ditemukan Properti" dilempar ke telepon return boardRepository.findAll(request).getContent();. Berikut adalah kutipan dari tomcat log.

DEBUG LOG

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

Pengecualian

Pengecualiannya adalah " org.springframework.data.mapping.PropertyReferenceException: No property board found for type com.tecnooc.picpin.model.UserBoard". Tetapi, jika saya mengerti dengan benar, properti boarditu ada di PinItemdan dipetakan dengan benar mappedBy = "board"di 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)

Saya tidak mengerti mengapa pengecualian ini dilemparkan. Tahu mengapa itu terjadi?

Catatan: Saya menggunakan Hibernate sebagai penyedia Persistence. Juga, bagian kode yang saya masukkan di sini adalah apa yang menurut saya relevan dengan masalah tersebut. Jika tidak, beri tahu saya dan saya akan memperbarui pertanyaan dengan porsi yang diperlukan.


2
Saya mengalami masalah yang sama ketika saya menamai ID tertanam sebagai MyCompositePK dan mencoba menulis findByMyCompositePKUserId (Long userId) . Intinya adalah, perlu camel case juga untuk CRUD repository, sehingga dapat membedakan antara properti tabel saat membuat query dari metode Anda. Jadi, itu harus MyCompositePk dan findByMyCompositePkUserId (Long userId)
EmeraldTablet

Jawaban:


138

Saya mengalami masalah yang sama ini dan menemukan solusinya di sini: https://dzone.com/articles/persistence-layer-spring-data

Saya telah mengganti nama properti entitas. Namun dengan Kueri Kustom Otomatis Pegas, ada antarmuka yang ditentukan untuk nama properti lama.

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

Kesalahan menunjukkan bahwa ia tidak dapat lagi menemukan "OldPropName" dan melontarkan pengecualian.

Mengutip artikel di DZone:

Saat Spring Data membuat implementasi Repositori baru, Spring Data menganalisis semua metode yang ditentukan oleh antarmuka dan mencoba menghasilkan kueri secara otomatis dari nama metode. Meskipun memiliki keterbatasan, ini adalah cara yang sangat kuat dan elegan untuk menentukan metode akses ubahsuaian dengan sedikit usaha. Misalnya, jika entitas yang dikelola memiliki bidang nama (dan pengambil dan penyetel standar Java Bean untuk bidang itu), menentukan metode findByName di antarmuka DAO akan secara otomatis menghasilkan kueri yang benar:

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

Ini adalah contoh yang relatif sederhana; kumpulan kata kunci yang jauh lebih besar didukung oleh mekanisme pembuatan kueri.

Jika parser tidak dapat mencocokkan properti dengan bidang objek domain, pengecualian berikut akan dilemparkan:

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

86

Penamaan Anda salah .

Sesuai dokumentasinya , jika repositori Anda adalah UserBoardRepository, implementasi dari repositori kustom Anda harus UserBoardRepositoryImpldinamai, di sini Anda menamakannya sebagai BoardServiceImpl, itulah mengapa ia melontarkan pengecualian.


1
Selain itu, semua kelas / antarmuka repositori harus ditempatkan dalam satu direktori - sejauh yang saya tahu
Błażej Kocik

6
Saya tidak tahu mengapa ini banyak disukai, tetapi tidak ada repositori khusus yang terlibat dalam pertanyaan ini. BoardServiceImplhanyalah layanan yang menggunakan UserBoardRepository.
Didier L

itu kasus saya! Saya tidak punya masalah sebelum saya memindahkan kelas Impl dalam paket yang sama sekali berbeda, tetapi setelah itu hal ini terjadi. Terima kasih
Buckstabue

Ini menyelamatkan hariku!
letimome

48

Diperbaiki, Saat menggunakan CrudRepositorySpring, kami harus menambahkan nama properti dengan benar setelah findBy jika tidak, Anda akan mendapat pengecualian "Tidak Ada Properti untuk Jenis"

Saya mendapatkan pengecualian ini sebagai. karena nama properti dan nama metode tidak sinkron.

Saya telah menggunakan kode di bawah ini untuk DB Access.

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

dan Pengguna Domain saya memiliki properti.

@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
Pendekatan ini membantu saya - Saya menggunakan nama yang salah dari properti kelas saya dalam metode 'default' repositori (disediakan oleh antarmuka CrudRepository) (ieinstea dari findByDateOfStatisticsBetween () Saya menggunakan penamaan metode findByDateBetween ())
ryzhman

1
contoh findStatusIdsalah findByStatusIdbenar dan untuk beberapa penamaan periksa stackoverflow.com/a/32796493/944593
shareef

Menghemat banyak waktu untuk saya. Terima kasih :).
Joey587

27

Karena nama repositori JPA Anda adalah UserBoardRepository , nama Antarmuka kustom Anda harus UserBoardRepositoryCustom (harus diakhiri dengan 'Kustom') dan nama kelas implementasi Anda harus UserBoardRepositoryImpl (harus diakhiri dengan Impl; Anda dapat menyetelnya dengan postfix berbeda menggunakan repositori- properti impl-postfix )


17

kesalahan ini terjadi jika Anda mencoba mengakses properti yang tidak ada

tebakan saya adalah bahwa penyortiran dilakukan oleh musim semi oleh property namedan bukan oleh real column name. dan kesalahan menunjukkan bahwa, "UserBoard"tidak ada properti bernama "boardId".

bests,

ek


Terima kasih. Butuh beberapa saat bagi saya untuk menemukan solusi ini karena Spring mengeluh tentang sesuatu yang sama sekali berbeda. Saya memiliki kelas Adan kelas Byang meluas Adan memiliki properti x. Itu mengeluh bahwa tidak dapat menemukan properti xdi kelas A...
GuiRitter

9

Dalam kasus saya, saya mengalami kesalahan ketik (kasus unta) di nama metode saya. Saya menamakannya menjadi "findbyLastName" dan menghadapi pengecualian ini. Setelah saya mengubahnya menjadi "findByLastName" pengecualian hilang.


1
Catatan untuk diri saya sendiri: Periksa kembali! :-)
lilalinux

8

Perhatikan di sini: jawaban dari Zane XY dan Alan B. Dee cukup bagus. Namun bagi Anda yang akan menggunakan Spring Boot sekarang, dan Spring Data, inilah jawaban yang lebih modern.

Misalkan Anda memiliki kelas seperti:

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

    private String myClassName;
}

Sekarang JpaRepositoryuntuk ini akan terlihat seperti

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

Sekarang metode pencarian "khusus" Anda harus dieja dengan Collection<MyClass> findByMyClassName(String myClassName)tepat karena Spring perlu memiliki beberapa mekanisme untuk memetakan metode ini pada MyClassproperti myClassName!

Saya menemukan ini karena, bagi saya, tampak wajar untuk menemukan kelas dengan namanya secara semantik , padahal, secara sinataksis Anda temukan dengan myClassName

Bersulang


2

sepertinya nama metode JpaRepository kustom Anda tidak cocok dengan Variabel apa pun di kelas entitas Anda. Pastikan nama metode Anda cocok dengan variabel di kelas entitas Anda

misalnya: Anda mendapatkan nama variabel yang disebut "aktif" dan metode JpaRepository khusus Anda mengatakan "findByActiveStatus" dan karena tidak ada variabel yang disebut "activeStatus", metode ini akan menampilkan "PropertyReferenceException"


1

Silakan Periksa nama properti di panggilan yang sebenarnya dari repo ei repository.findByUsername (nama pengguna)


0

Di JPA, sebuah hubungan memiliki satu pemilik, dan dengan menggunakan mappedBydi UserBoardkelas Anda, Anda mengetahui bahwa itu PinItemadalah pemilik dari hubungan dua arah tersebut, dan bahwa properti dalam PinItemhubungan tersebut dinamai board.

Di UserBoardkelas Anda, Anda tidak memiliki bidang / properti dengan nama board, tetapi memiliki properti pinItemList, jadi Anda dapat mencoba menggunakan properti itu sebagai gantinya.


0

Jika proyek Anda menggunakan Spring-Boot, Anda dapat mencoba menambahkan anotasi ini di Application.java Anda.

@EnableJpaRepositories(repositoryFactoryBeanClass=CustomRepositoryFactoryBean.class)
@SpringBootApplication

public class Application {.....

0

Anda harus menerima halaman penggunaan, seperti ini

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

0

Anda harus menetapkan properti tersebut dalam model atau kelas entitas Anda.


0

Saya memiliki masalah serupa yang menyebabkan saya pusing selama berjam-jam.

Metode repositori saya adalah:

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

Saya mendapat kesalahan, bahwa tipe properti tidak ditemukan untuk tipe ResultClass.

Solusinya adalah, jpa / hibernate tidak mendukung bentuk jamak? Namun demikian, menghapus 's' memecahkan masalah:

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

Maaf, apa yang kamu hapus? Kedua garis ini terlihat sama
Raymond Chen

@ user7344209 Saya memperbaiki kesalahan ini. Lihat nama metode dari contoh kode kedua.
mirisbowring

Bahkan untuk Objek nama entitas?
P Satish Patro

0

Saya memiliki pengecualian ini baru-baru ini ketika pindah ke versi boot musim semi yang lebih baru (dari 1.5.4 ke 1.5.20). Masalahnya ada pada struktur paket repositori.

Masalah: Di bawah paket yang sama adalah paket: repository, repositoryCustom dan repositoryImpl.

Solusi: Atur ulang paket repositori sehingga paket repositori berisi paket repositoryCustom dan paket repositoryCustom berisi repositoryImpl:

gudang 
   |
   ----- repositoryCustom
             |
             ----- repositoryImpl

0

Skenario lain, yang belum disebutkan di sini, yang menyebabkan kesalahan ini adalah API yang menerima Pageable(atau Sort) dan meneruskannya, sebagaimana adanya, ke repositori JPA saat memanggil API dari Swagger.

Nilai default swagger untuk Pageableparameter adalah ini:

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

Perhatikan di "string"sana yang merupakan properti yang memang ada. Menjalankan API tanpa menghapus atau mengubahnya akan menyebabkanorg.springframework.data.mapping.PropertyReferenceException: No property string found for type ...

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.