الحصول على "الاستعلام المسماة" مع إطار الربيع

StackOverflow https://stackoverflow.com/questions/3154026

  •  01-10-2019
  •  | 
  •  

سؤال

لدي فئة جافا (كيان) مع مجموعة من الاستعلامات المسماة. عندما يحاول الربيع حقن الفول ذي الصلة ، فإنه لا يجد أحد الاستعلامات.

على سبيل المثال:

@NamedQueries({
        @NamedQuery(name = "Query1", query = "..."),
        @NamedQuery(name = "Query2", query = "..."),
        @NamedQuery(name = "Query3", query = "..."),
        @NamedQuery(name = "Query4", query = "..."),
        @NamedQuery(name = "Query5", query = "...")
})

عندما يحاول الربيع ضخ الفول ، أحصل على:

org.springframework.beans.factory.BeanCreationException: Error creating bean
with name 'myBean': Injection of resource methods failed;nested exception is
java.lang.IllegalArgumentException: Named query not found: Query3 at ...

أنا متأكد من أن الاستعلامات صحيحة (جميع اختبارات الوحدة الخاصة بها تمر).

هل يعرف أي شخص السبب الجذري لذلك؟

هل كانت مفيدة؟

المحلول 2

حسنًا ، لقد حصلت على الخطأ. ما كان يحدث على النحو التالي:

في صفي ، كانت هناك طريقة مشروحة مع Resource ، والتي تسمى الاستعلام المسماة المعلن في فئة أخرى مشروح مع entity).

لذلك ، عندما يحقن الربيع ويدير الطريقة ، فإنه يحاول استخدام الاستعلام المسماة. ومع ذلك ، فإن الاستعلام ليس "جاهزًا" لاستخدامه ، والاستثناء الذي تم رميه هو أنه لم يتم العثور على الاستعلام.

لحل هذا ، يجب أن أقوم بتشغيل طريقة مختلفة تسمى عند الانتهاء من حقن الربيع ، أي ، على صفي أن ينفذ واجهة org.springframework.context.ApplicationLister و method onapplicationevent ينتظر a org.springframework.context.event. COTEXTREFRESHEDEVENT الحدث.

هذا كل اللاعبين. شكرا لك بوزو لمساعدتكم.

نصائح أخرى

  • تأكد من تعيين كيانك / مسحه. هل هو مشروح مع @Entity, ، هل تضاف إلى persistence.xml أو إلى تكوين المزود ذي الصلة ، أم أنه تم مسحه ضوئيًا تلقائيًا.

  • سأبادف اسم الفصل إلى الاستعلام - أي MyEntity.Query1, MyEntity.Query1 إلخ.

  • تحقق مما إذا كانت هناك أخطاء في النشر - أي أن استعلامك صحيح

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top