programing

Spring mongo 데이터 저장소 인터페이스를 위한 "16진수 표현 추가"

skycolor 2023. 7. 6. 22:03
반응형

Spring mongo 데이터 저장소 인터페이스를 위한 "16진수 표현 추가"

저장소 인터페이스는 다음과 같습니다.

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

콩을 만드는 동안 봄은 예외를 따릅니다.

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]

이상적으로 이 예외는 초기화를 시도할 때 발생해야 합니다.ObjectId잘못된 문자열을 사용합니다.[코드].콩을 만들 때 예외가 던져지기 위해서는 어떻게 수업이 초기화되는지 궁금합니다.이것에 대한 팁이 있습니까?

저는 같은 질문에 부딪혔고 다음과 같은 질문이 먹힐 것입니다.

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

DBEf인 경우 다음과 같아야 합니다. (같은 문제가 발생한 후에 사용하는 것입니다. 저의 경우 DBEf가 있습니다.)

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

DBef의 경우에도 이 기능이 작동해야 합니다.

List<ExcursionAttendee> findByStudentId(String studentId);

여기서 답을 찾았습니다.

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

스프링 데이터 방법 명명 규칙을 따르는 경우 @Query를 지정할 필요가 없습니다.

쿼리는 다음과 함께 작동해야 합니다.

@Query("{ 'student._id' : ?0} , 'excursionEvent._id' : ?1 } }")

참조: https://jira.spring.io/si/jira.issueviews:issue-html/DATAMONGO-1070/DATAMONGO-1070.html

언급URL : https://stackoverflow.com/questions/39748284/invalid-hexadecimal-representation-for-spring-mongo-data-repository-interface

반응형