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 .