query mongo example data baeldung mongodb spring-data spring-data-mongodb

mongodb - example - spring mongo mapping



“Representación hexadecimal no válida” para la interfaz del repositorio de datos de Spring Mongo (2)

Tengo una interfaz de repositorio de la siguiente manera:

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

Mientras que la primavera de la creación del frijol lanza la siguiente excepción.

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]

Idealmente, estas excepciones deberían lanzarse cuando se intenta inicializar un ObjectId con una cadena no válida. [ code ]. Me pregunto cómo se inicializa la clase para que se lance una excepción mientras se crea el bean. ¿Algún consejo sobre esto?


Me encontré con la misma pregunta y lo siguiente debería funcionar.

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

Si es un DBRef, debería ser así, (esto es lo que estoy usando después del mismo problema, tengo un DBRef en mi caso)

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

Para DBRef esto debería funcionar también,

List<ExcursionAttendee> findByStudentId(String studentId);

Encontré la respuesta desde here .


@Query("{ ''student._id'' : {''$oid'' : ?0} , ''excursionEvent._id'' : { ''$oid'' : ?1 } }") ExcursionAttendee findByStudentIdAndEventId(String studentId, String excursionId);

No es necesario que especifique @Query si sigue las convenciones de nomenclatura del método Spring-Data .