Eclipselink JPQL (Glassfish V3): انضم إلى مشكلة في التجميع؟

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

  •  22-09-2019
  •  | 
  •  

سؤال

مع السبات ، اعتدت على فعل شيء مثل ما يلي:

select n from NetworkElement n join fetch n.site s where s.active is true

ومع ذلك ، فإن Eclipselink يشكو كثيرًا من هذا:

Caused by: Exception [EclipseLink-8024] (Eclipse Persistence Services - 2.0.0.v20091127-r5931): org.eclipse.persistence.exceptions.JPQLException Exception Description: Syntax error parsing the query [select n from NetworkElement n join fetch n.site s], line 1, column 49: syntax error at [s].

(يختلف الاستعلام على المكدس عن الاستعلام أعلاه ، لكن النتيجة هي نفسها)

لقد جربت مجموعات مختلفة ، لم يعمل أي منها:

select n from NetworkElement n join fetch n.site where n.site.active is true
select n from NetworkElement n join fetch n.site as site where site.active is true

لقد حاولت أيضًا التحول إلى كيان مختلف في نموذج النطاق الخاص بي ، وأشك في أن التعيين الخاص بي غير صحيح. ومع ذلك ، نفس المشكلة.

هل يمكن أن يكون لا يمكنني تحقيق ذلك إلا باستخدام تلميح استعلام؟ لا أريد أن أفعل ذلك.

بالمناسبة ، أنا أستخدم Ecliselink كما يتم شحنها مع NetBeans 6.8 و Glassfish V3.

سأقدر أي مساعدة!

رودريغو

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

المحلول

القضية الرئيسية هي أن بناء جملة JPQL لا يسمح بوجود توصيلات الاسم المستعار وهذا هو السبب في أن Eclipselink يستخدم تلميحات الاستعلام لهذه الوظيفة. يوجد طلب تحسين لإضافة جلبات JPQL مباشرة في JPQL ، وإذا كنت ترغب في رؤيته مكتملة ، فيرجى التصويت لصالحه. (( https://bugs.eclipse.org/bugs/show_bug.cgi؟id=293775 ).

-غوردون يورك

نصائح أخرى

حسنًا ، يبدو أنه لا يُسمح للمرء بالاستمتاع بانضمام إلى JPQL ، في الواقع .. إنه يعمل مع السبات لأنه يدعم التعرجات من خلال HQL ، ويُسمح لك بإصدار HQL لكائن Query JPA.

لذلك ، لم يكن لدي أي خيار سوى التبديل إلى الاستعلامات المسماة مع تلميحات الاستعلام. لا أحب الإعلان حقًا عن الاستعلامات مع التعليقات التوضيحية بسبب الارتفاع العالي في فصول الكيانات ، لذلك أضفت ملف orm.xml إلى جرة وحدة الثبات ، وفعلت ما يلي:

<!-- Fetch network elements -->
<named-query name="fetchNetworkElements">
    <query>select n from NetworkElement n</query>
    <lock-mode>NONE</lock-mode>
    <hint name="eclipselink.join-fetch" value="n.site" />
    <hint name="eclipselink.join-fetch" value="n.site.area" />
</named-query>

نأمل أن يعطي هذا بعض الدلائل على أي شخص يكافح مع نفس أوجه القصور في JPQL RAW.

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