স্প্রিং ডেটা জেপিএ - "প্রকারের জন্য কোনও সম্পত্তি পাওয়া যায় নি" ব্যতিক্রম


126

ঠিক আছে, আমি গুগল অনুসন্ধান করেছি এবং অনেক ফলাফল পেয়েছি, কিন্তু তাদের কেউই আমার সমস্যার উত্তর দিতে সক্ষম হয় নি। সুতরাং, এখানে এটি যায়।

আমি পিন্টারেস্ট ক্লোনটির ন্যূনতম বাস্তবায়ন করে স্প্রিং এমভিসি এবং স্প্রিং ডেটা জেপিএ অধ্যয়ন করার চেষ্টা করছি। সুতরাং, নীচের কোডগুলির অংশগুলি যা আমি আমার সমস্যার সাথে প্রাসঙ্গিক বলে মনে করি।

মডেল / সংস্থাগুলো

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

কেন এই ব্যতিক্রম নিক্ষেপ করা হয় তা আমি পাই না। কোন ধারণা কেন এটি হচ্ছে?

দ্রষ্টব্য: আমি হাইবারনেটকে দৃistence়তা সরবরাহকারী হিসাবে ব্যবহার করছি। এছাড়াও, আমি এখানে যে কোডের অংশটি রেখেছি তা হ'ল যা আমি মনে করি সমস্যার সাথে প্রাসঙ্গিক। যদি তা না হয় তবে আমাকে জানান এবং আমি প্রয়োজনীয় অংশটি দিয়ে প্রশ্নটি আপডেট করব।


2
আমি যখন এমবেডেড আইডিটিকে মাইকম্পোসাইটপিকে নাম দিয়েছি এবং সন্ধানের বাইমাইকম্পোজিটপিপিউজারআইডি (লং ইউজারআইডি) লেখার চেষ্টা করেছি তখন আমি একই সমস্যায় পড়েছি । মুল বক্তব্যটি হ'ল সিআরইউডি সংগ্রহস্থলের জন্য এটি উটের ক্ষেত্রেও হওয়া দরকার, যাতে আপনার পদ্ধতির বাইরে কোয়েরি তৈরি করার সময় টেবিলের বৈশিষ্ট্যগুলির মধ্যে পার্থক্য করা যায়। সুতরাং, এটি মাইকম্পোসাইটপেক এবং সন্ধানকারী
এমেরাল্ড ট্যাবলেট

উত্তর:


138

আমি এই একই ইস্যুতে দৌড়ে এসে সমাধানটি এখানে পেয়েছি: https://dzone.com/articles/persistance-layer-spring-data

আমি একটি সত্তার সম্পত্তিটির নামকরণ করেছি। তবে স্প্রিংস অটোমেটিক কাস্টম প্রশ্নের সাথে পুরানো সম্পত্তির নামের জন্য একটি ইন্টারফেস সংজ্ঞায়িত হয়েছিল।

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

ত্রুটিটি নির্দেশ করে যে এটি আর "OldPropName" খুঁজে পেতে পারে না এবং ব্যতিক্রম ছুঁড়ে ফেলে thre

ডিজেনে নিবন্ধটি উদ্ধৃত করতে:

যখন স্প্রিং ডেটা একটি নতুন সংগ্রহস্থল বাস্তবায়ন তৈরি করে, এটি ইন্টারফেস দ্বারা নির্ধারিত সমস্ত পদ্ধতি বিশ্লেষণ করে এবং পদ্ধতিটির নাম থেকে স্বয়ংক্রিয়ভাবে কোয়েরি উত্পন্ন করার চেষ্টা করে। যদিও এর সীমাবদ্ধতা রয়েছে, এটি খুব সামান্য প্রচেষ্টা সহ নতুন কাস্টম অ্যাক্সেস পদ্ধতি সংজ্ঞায়নের একটি খুব শক্তিশালী এবং মার্জিত উপায়। উদাহরণস্বরূপ, যদি পরিচালিত সত্তার একটি নাম ক্ষেত্র থাকে (এবং সেই ক্ষেত্রটির জন্য জাভা বিন স্ট্যান্ডার্ড গেটর এবং সেটটার), ডিএও ইন্টারফেসে ফাইন্ডবাইম পদ্ধতিটি সংজ্ঞায়িত করে সঠিকভাবে কোয়েরি তৈরি করবে:

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
দিদিয়ের এল

এটাই আমার ঘটনা! আমি সম্পূর্ণ ভিন্ন প্যাকেজে ইমপ্ল ক্লাসগুলি সরানোর আগে আমার কোনও সমস্যা হয়নি, তবে এর পরে এটি ঘটেছিল। ধন্যবাদ
বকস্টাব্যু

এই আমার দিন বাঁচা!
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
এই দৃষ্টিভঙ্গি আমাকে সহায়তা করেছিল - আমি আমার শ্রেণীর সম্পত্তির ভুল নামটি সংগ্রহস্থলটির 'ডিফল্ট' (ক্রুডেপোসিটরি ইন্টারফেস দ্বারা সরবরাহিত) পদ্ধতিতে (ফাইন্ডডাইফস্ট্যাটিস্টিকস বিটিউইন (যেমন ফাইন্ডবাইটবিটুইন () পদ্ধতি নামকরণ) ব্যবহার করেছি)
ryzhman

1
উদাহরণস্বরূপ findStatusIdভুল findByStatusIdসঠিক ও জন্য একাধিক নামকরণ চেক stackoverflow.com/a/32796493/944593
শরীফ

আমার জন্য এক টন সময় বাঁচিয়েছে। ধন্যবাদ :).
Joey587

27

যেহেতু আপনার জেপিএ সংগ্রহস্থলটির নাম ইউজারবোর্ডোপোজিটরি , তাই আপনার কাস্টম ইন্টারফেসের নামটি ইউজারবোর্ডরোপোসিটরি কাস্টম হওয়া উচিত (এটি 'কাস্টম' দিয়ে শেষ হওয়া উচিত) এবং আপনার বাস্তবায়ন শ্রেণীর নামটি ইউজারবোর্ডরোপোসিট্রিআইম্পল হওয়া উচিত ( ইমপ্লের সাথে শেষ হওয়া উচিত; আপনি এটি আলাদা পোস্টফিক্সের সাহায্যে সংগ্রহস্থল ব্যবহার করে সেট করতে পারেন) ইমপ্ল-পোস্টফিক্স সম্পত্তি)


17

আপনি যদি অ-বিদ্যমান সম্পত্তি অ্যাক্সেস করার চেষ্টা করেন তবে এই ত্রুটি ঘটে happens

আমার অনুমান যে বাছাইটি বসন্তের মাধ্যমে property nameএবং দ্বারা হয় না real column name। এবং ত্রুটিটি নির্দেশ করে যে "UserBoard"এখানে কোনও সম্পত্তি নেই "boardId"

bests,

ত্তক্


ধন্যবাদ. এই সমাধানটি পেতে আমার কিছুটা সময় লেগেছে কারণ বসন্ত পুরোপুরি আলাদা কিছু নিয়ে অভিযোগ করছিল। আমার একটি ক্লাস Aএবং একটি ক্লাস রয়েছে Bযা প্রসারিত Aএবং একটি সম্পত্তি আছে x। এটি অভিযোগ করছিল যে এটি xশ্রেণিতে সম্পত্তি খুঁজে A
পাচ্ছে না

9

আমার ক্ষেত্রে আমার পদ্ধতির নামে টাইপো (উটের কেস) ছিল। আমি এটিকে "ফাইন্ডবাইস্টনেম" নাম দিয়েছি এবং এই ব্যতিক্রমটির মুখোমুখি হয়েছি। আমি এটি "FindByLastName" এ পরিবর্তনের পরে ব্যতিক্রমটি চলে গেল।


1
আমার কাছে নোট: ডাবল চেক! :-)
লিল্লিনাক্স 26'19

8

এখানে নোট করুন: জেন এক্সওয়াই এবং অ্যালান বি ডি-এর উত্তরগুলি বেশ ভাল। তবুও আপনারা যারা এখন স্প্রিং বুট এবং স্প্রিং ডেটা ব্যবহার করবেন তাদের জন্য এখানে আরও আধুনিক উত্তর দেওয়া হবে।

ধরুন আপনার ক্লাস রয়েছে যেমন:

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

আমি এটিকে বুঝতে পেরেছিলাম কারণ, আমার কাছে শব্দার্থকভাবে একটি শ্রেণীর সন্ধান করা স্বাভাবিক বলে মনে হয়েছিল , যদিও বাস্তবে সিন্ডেক্সটিক্যালি আপনি আমার ক্লাসনামের দ্বারা খুঁজে পেয়েছেন

চিয়ার্স


2

দেখে মনে হচ্ছে আপনার কাস্টম JpaRepository পদ্ধতির নামটি আপনার সত্তা শ্রেণীর কোনও ভেরিয়েবলের সাথে মেলে না। আপনার পদ্ধতির নামটি আপনার সত্তা শ্রেণীর একটি পরিবর্তকের সাথে মেলে তা নিশ্চিত করুন

উদাহরণস্বরূপ: আপনি "অ্যাক্টিভ" নামে একটি পরিবর্তনীয় নাম পেয়েছেন এবং আপনার কাস্টম জেপাআরপোসিটরি পদ্ধতিতে "FindByActiveStatus" বলছে এবং যেহেতু "অ্যাক্টিভ স্ট্যাটাস" নামে কোনও ভেরিয়েবল নেই এটি "সম্পত্তিReferencesException" নিক্ষেপ করবে



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);

আমি ত্রুটি পেয়েছি যে সম্পত্তি ফলাফল টাইপ রেজাল্টক্লাসের জন্য খুঁজে পাওয়া যায় নি।

সমাধানটি ছিল, যে জেপিএ / হাইবারনেট বহুবচনকে সমর্থন করে না? তবুও, 'গুলি' সরানো সমস্যার সমাধান করেছে:

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

দুঃখিত আপনি কোনটি মুছে ফেলেছেন? এই দুটি লাইন একই দেখায়
রেমন্ড চেন

@ ব্যবহারকারী 7344209 আমি এই ভুলটি সংশোধন করেছি। দ্বিতীয় কোডের নমুনার পদ্ধতির নামটি দেখুন।
মিরসোবোরিং

এমনকি সত্তার নাম অবজেক্টের জন্য?
পি সতীশ প্যাট্রো

0

সম্প্রতি একটি নতুন বসন্ত-বুট সংস্করণে যাওয়ার সময় আমার এই ব্যতিক্রম ছিল (1.5.4 থেকে 1.5.20 থেকে)। সমস্যাটি ছিল সংগ্রহস্থল প্যাকেজ কাঠামোতে।

সমস্যা: একই প্যাকেজের অধীনে প্যাকেজগুলি ছিল: সংগ্রহস্থল, সংগ্রহস্থল কাস্টম এবং সংগ্রহস্থল আইএমপিএল।

সমাধান: সংগ্রহস্থল প্যাকেজগুলি পুনরায় সাজিয়ে রাখুন যাতে সংগ্রহস্থল প্যাকেজটিতে repositoryCustom প্যাকেজ থাকে এবং repositoryCustom প্যাকেজে repositoryImpl থাকে:

সংগ্রহস্থলের 
   |
   ----- সংগ্রহস্থল কাস্টম
             |
             ----- repositoryImpl

0

আর একটি দৃশ্য, যা এখনও এখানে উল্লেখ করা হয়নি, যে কারণে এই ত্রুটিটি হ'ল এমন একটি এপিআই যা Pageable(বাSort স্বাগার থেকে এপিআই কল করার সময় জেপিএ সংগ্রহস্থলে যেমন) এটি পাস করে।

Pageableপ্যারামিটারের জন্য সোয়াগার ডিফল্ট মানটি হ'ল:

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

"string"সেখানে একটি সম্পত্তি আছে যা লক্ষ্য করে দেখুন । মুছে ফেলা বা পরিবর্তন না করে এপিআই চালানোর কারণ ঘটবেorg.springframework.data.mapping.PropertyReferenceException: No property string found for type ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.