स्प्रिंग डेटा जेपीए - "टाइप के लिए कोई संपत्ति नहीं मिली" अपवाद


126

खैर, मैंने Google पर खोज की और कई परिणाम पाए, लेकिन उनमें से कोई भी मेरी समस्या का उत्तर देने में सक्षम नहीं था। तो, यहाँ यह जाता है।

मैं Pinterest क्लोन का न्यूनतम कार्यान्वयन करके स्प्रिंग MVC और स्प्रिंग डेटा JPA का अध्ययन करने का प्रयास कर रहा हूं। इसलिए, कोड के कुछ भाग निम्नलिखित हैं जो मुझे लगता है कि मेरी समस्या के लिए प्रासंगिक है।

मॉडल / संस्थाओं

@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();। यहाँ टॉमकैट लॉग का अंश दिया गया है।

लॉग को डीबग करें

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) लिखने की कोशिश की । मुद्दा यह है, यह ऊंट मामले के साथ-साथ सीआरयूडी रिपॉजिटरी के लिए भी आवश्यक है, ताकि आपके तरीके से क्वेरी बनाते समय तालिका गुणों के बीच अंतर किया जा सके। तो, यह होना चाहिए MyCompositePk और findByMyCompositePkUserId (Long userId)
एमराल्डटेबल

जवाबों:


138

मैं इसी मुद्दे पर भाग गया और यहाँ समाधान पाया: https://dzone.com/articles/persistence-layer-sprat-tata

मैंने एक इकाई संपत्ति का नाम बदल दिया था। लेकिन स्प्रिंग्स स्वचालित कस्टम क्वेरी के साथ पुरानी संपत्ति के नाम के लिए एक इंटरफ़ेस परिभाषित किया गया था।

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

त्रुटि ने संकेत दिया कि यह "OldPropName" नहीं ढूँढ सकता है और अपवाद को फेंक दिया है।

DZone पर लेख उद्धृत करने के लिए:

जब स्प्रिंग डेटा एक नया रिपॉजिटरी कार्यान्वयन बनाता है, तो यह इंटरफेस द्वारा परिभाषित सभी तरीकों का विश्लेषण करता है और विधि नाम से प्रश्नों को स्वचालित रूप से उत्पन्न करने की कोशिश करता है। जबकि इसकी सीमाएँ हैं, यह बहुत कम प्रयास के साथ नए कस्टम एक्सेस तरीकों को परिभाषित करने का एक बहुत शक्तिशाली और सुरुचिपूर्ण तरीका है। उदाहरण के लिए, यदि प्रबंधित इकाई का नाम फ़ील्ड है (और उस क्षेत्र के लिए जावा बीन मानक गेट्टर और सेटर), DAO इंटरफ़ेस में findByName विधि को परिभाषित करने से स्वचालित रूप से सही क्वेरी उत्पन्न होगी:

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łaocej Kocik

6
मुझे नहीं पता कि यह इतना ऊपर क्यों उठाया गया है, लेकिन इस प्रश्न में कोई कस्टम रिपॉजिटरी शामिल नहीं है। BoardServiceImplसिर्फ एक सेवा का उपयोग कर रहा है UserBoardRepository
दीदी एल

यह मेरा मामला है! मुझे कोई समस्या नहीं थी इससे पहले कि मैं पूरी तरह से अलग पैकेज में Impl कक्षाएं ले जाऊं, लेकिन इसके बाद ऐसा हुआ। धन्यवाद
Buckstabue

इससे मेरा दिन बच गया!
Letimome

47

फिक्स्ड, CrudRepositoryस्प्रिंग का उपयोग करते समय , हमें ढूंढने के बाद प्रॉपर्टीनाम को सही तरीके से जोड़ना होगा अन्यथा यह आपको "कोई संपत्ति नहीं" जैसे अपवाद देगा।

मुझे यह अपवाद के रूप में मिल रहा था। क्योंकि संपत्ति का नाम और विधि का नाम सिंक में नहीं थे।

मैंने डीबी एक्सेस के लिए नीचे दिए गए कोड का उपयोग किया है।

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 इंटरफ़ेस द्वारा प्रदान की गई) विधि में अपनी कक्षा की एक संपत्ति के गलत नाम का इस्तेमाल किया (यानी FindByDateOfStatisticsBetween का पता) (20) ने बाइटडेटबेटन () विधि नामकरण) का उपयोग किया
ryzhman

1
उदाहरण findStatusIdगलत findByStatusIdहै और कई नामकरण जांच के लिए stackoverflow.com/a/32796493/944593
shareef

मेरे लिए एक टन का समय बचा। धन्यवाद :)।
जोये 587

27

चूंकि आपका जेपीए रिपॉजिटरी नाम है UserBoardRepository है , इसलिए आपका कस्टम इंटरफ़ेस नाम UserBoardRepositoryCustom (यह 'कस्टम' के साथ समाप्त होना चाहिए) होना चाहिए और आपका कार्यान्वयन वर्ग नाम UserBoardRepositoryImpl होना चाहिए ( Impl के साथ समाप्त होना चाहिए) आप रिपॉजिटरी का उपयोग करके इसे किसी भिन्न पोस्टफ़िक्स के साथ सेट कर सकते हैं अंतर्निहित-उपसर्ग संपत्ति)


17

यह त्रुटि तब होती है यदि आप अन-प्रॉपर्टी को एक्सेस करने का प्रयास करते हैं

मेरा अनुमान है कि छंटाई वसंत द्वारा की जाती है property nameऔर इसके द्वारा नहीं की जाती है real column name। और त्रुटि इंगित करती है कि, "UserBoard"नाम की कोई संपत्ति नहीं है"boardId"

bests,

बलूत


धन्यवाद। इस समाधान को खोजने में मुझे थोड़ा समय लगा क्योंकि स्प्रिंग कुछ अलग तरह की शिकायत कर रहा था। मेरे पास एक वर्ग Aऔर एक वर्ग है Bजो विस्तार करता है Aऔर एक संपत्ति रखता है x। यह शिकायत कर रहा था कि यह xकक्षा में संपत्ति नहीं पा सकता था A...
GuiRitter

9

मेरे मामले में मेरे पास मेरे नाम में टाइपो (ऊंट केस) था। मैंने इसे "findbyLastName" नाम दिया और इस अपवाद का सामना किया। मैं इसे "findByLastName" में बदलने के बाद अपवाद हो गया था।


1
खुद पर ध्यान दें: डबल चेक! :-)
लीलालिनक्स

8

यहाँ ध्यान दें: ज़ेन XY और एलन बी डी के उत्तर काफी अच्छे हैं। फिर भी आप में से जो लोग स्प्रिंग बूट का उपयोग करते हैं, और स्प्रिंग डेटा, यहां एक और आधुनिक उत्तर होगा।

मान लीजिए कि आपके पास एक वर्ग है जैसे:

@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) ठीक - ठीक लिखा जाना चाहिए क्योंकि वसंत को MyClassसंपत्ति पर इस विधि को मैप करने के लिए कुछ तंत्र की आवश्यकता होती है myClassName!

मुझे यह समझ में आया, क्योंकि मुझे, उसके नाम से शब्दार्थ से एक वर्ग मिलना स्वाभाविक लग रहा था , जबकि वास्तव में, आप को समानार्थी शब्द myClassName द्वारा पाते हैं

चियर्स


2

ऐसा लगता है कि आपका कस्टम JpaRepository विधि का नाम आपके इकाई वर्ग में किसी भी चर से मेल नहीं खाता है। सुनिश्चित करें कि आपकी विधि का नाम आपके इकाई वर्ग में एक चर से मेल खाता है

उदाहरण के लिए: आपको "सक्रिय" नामक एक चर नाम मिला है और आपका कस्टम JpaRepository विधि "findByActiveStatus" कहती है और चूंकि "activeStatus" नामक कोई चर नहीं है, इसलिए यह "PropertyReferenceException" को फेंक देगा



0

जेपीए में एक रिश्ते में एक ही मालिक होता है, और mappedByअपनी UserBoardकक्षा में उपयोग करके आप यह बताते हैं कि PinItemउस द्विदिश संबंध का मालिक है, और रिश्ते की संपत्ति PinItemका नामboard

आपकी UserBoardकक्षा में आपके पास नाम के साथ कोई क्षेत्र / संपत्ति नहीं है board, लेकिन इसके पास एक संपत्ति है pinItemList, इसलिए आप इसके बजाय उस संपत्ति का उपयोग करने का प्रयास कर सकते हैं।


0

यदि आपकी परियोजना ने स्प्रिंग-बूट का उपयोग किया है, तो आप अपने अनुप्रयोग में इस एनोटेशन को जोड़ने का प्रयास कर सकते हैं। जावा।

@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

आपके पास वह मॉडल होना चाहिए जो आपके मॉडल या इकाई वर्ग में परिभाषित है।


0

मुझे एक ऐसी समस्या थी जिससे मुझे कुछ घंटों के लिए सिरदर्द हो गया।

मेरी रिपॉजिटरी विधि थी:

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

मुझे त्रुटि मिली, कि ResultClass प्रकार के लिए संपत्ति प्रकार नहीं मिला।

इसका समाधान यह था, कि jpa / hibernate बहुवचन का समर्थन नहीं करता है? फिर भी, 's' को हटाने से समस्या हल हो गई:

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

क्षमा करें, आपने क्या हटाया? ये दो रेखाएं समान दिखती हैं
रेमंड चेन

@ user7344209 मैंने इस गलती को सुधारा। दूसरे कोड नमूने की विधि का नाम देखें।
मिर्शिबोरिंग

यहां तक ​​कि इकाई नाम वस्तुओं के लिए भी?
पी सतीश पात्रो

0

हाल ही में एक नए स्प्रिंग-बूट संस्करण (1.5.4 से 1.5.20 तक) में जाने पर मेरा यह अपवाद था। समस्या रिपॉजिटरी पैकेज संरचना में थी।

समस्या: एक ही पैकेज के तहत पैकेज थे: रिपॉजिटरी, रिपॉजिटरी कस्टम और रिपॉजिटरीइम्प्ल।

समाधान: रिपॉजिटरी पैकेज को पुनर्व्यवस्थित करें ताकि रिपॉजिटरी पैकेज में रिपॉजिटरी कस्टम पैकेज और रिपॉजिटरी कस्टम पैकेज में रिपॉजिटरी पैकेज शामिल हों:

कोष 
   |
   ----- रिपॉजिटरी कस्टम
             |
             ----- repositoryImpl

0

एक अन्य परिदृश्य, जिसका अभी तक यहां उल्लेख नहीं किया गया था, क्योंकि यह त्रुटि एपीआई है जो Pageable(या Sort) प्राप्त करता है और इसे पास करता है, जैसा कि, स्वैगर से एपीआई को कॉल करते समय जेपीए रिपॉजिटरी को दिया जाता है।

Pageableपैरामीटर के लिए स्वैगर डिफ़ॉल्ट मान यह है:

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

"string"वहाँ एक संपत्ति है जो मौजूद है नोटिस । एपीआई को हटाने या बदलने के बिना इसे चलाने का कारण होगाorg.springframework.data.mapping.PropertyReferenceException: No property string found for type ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.