Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"invalid hexadecimal representation" for spring mongo data repository interface

I have a repository interface as follows:

public interface ExcursionAttendeeRepository extends MongoRepository<ExcursionAttendee, String> {      ExcursionAttendee findByWorkflowItemId(String workflowItemId);      @Query("{ 'excursionEvent._id' : { '$oid' : ?0 } }")     List<ExcursionAttendee> findByExcursionId(String excursionId);      @Query("{ 'student._id' : {'$oid' : ?0} , 'excursionEvent._id' : { '$oid' : ?1 } }")     ExcursionAttendee findByStudentIdAndEventId(String studentId, String excursionId);      @Query("{ 'student._id' : { '$oid' : ?0 } }")     List<ExcursionAttendee> findByStudentId(String studentId); } 

While Bean creation spring throws following exception.

Context initialization failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer#0.1':   Cannot create inner bean '(inner bean)#5172829b' of type [org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter] while setting bean property 'messageListener';   nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#5172829b':     Cannot resolve reference to bean 'productDetailsEventConsumer' while setting bean property 'delegate';     nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productDetailsEventConsumer': Injection of autowired dependencies failed;     nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.cinglevue.veip.service.excursion.ExcursionAttendeeService com.cinglevue.veip.service.erp.impl.ProductDetailsEventConsumer.excursionAttendeeService;     nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'excursionAttendeeServiceImpl': Injection of autowired dependencies failed;     nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.cinglevue.veip.repository.excursion.ExcursionAttendeeRepository com.cinglevue.veip.service.excursion.impl.ExcursionAttendeeServiceImpl.excursionAttendeeRepository;     nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'excursionAttendeeRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: invalid hexadecimal representation of an ObjectId: [_param_0] 

Ideally this exceptions should get thrown when trying to initialise a ObjectId with an invalid string. [ code ]. I'm wondering how the class gets initialised in order for an exception to get thrown while bean creation. Any tips on this?

like image 328
Susitha Ravinda Senarath Avatar asked Sep 28 '16 12:09

Susitha Ravinda Senarath


1 Answers

I ran into the same question and following should work.

@Query("{ 'student' : { '$id': ?0 } }") List<ExcursionAttendee> findByStudentId(String studentId); 

If it is a DBRef it should be like this, (This is what im using after the same issue, I have a DBRef in my case)

@Query("{ 'student': {'$ref': 'user', '$id': ?0} }") List<ExcursionAttendee> findByStudentId(String studentId); 

For DBRef this should work as well,

List<ExcursionAttendee> findByStudentId(String studentId); 

I found the answer from here.

like image 56
Maleen Abewardana Avatar answered Oct 11 '22 15:10

Maleen Abewardana