الحصول على "الاستعلام المسماة" مع إطار الربيع
-
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
إلخ.تحقق مما إذا كانت هناك أخطاء في النشر - أي أن استعلامك صحيح