سؤال

لدي كود Java 6 التالي:

    Query q = em.createNativeQuery( 
        "select T.* " +
        "from Trip T join Itinerary I on (T.itinerary_id=I.id) " +
        "where I.launchDate between :start and :end " +
        "or ADDDATE(I.launchDate, I.equipmentPullDayOfTrip) between :start and :end",
        "TripResults" );

    q.setParameter( "start", range.getStart(), TemporalType.DATE );
    q.setParameter( "end", range.getEnd(), TemporalType.DATE );

    @SqlResultSetMapping( name="TripResults",
        entities={
            @EntityResult( entityClass=TripEntity.class ),
            @EntityResult( entityClass=CommercialTripEntity.class )
        }
    )

أتلقى خطأً في بناء الجملة في آخر قوس إغلاق أيمن.الكسوف يعطي:"أدخل EnumBody لإكمال بيان الكتلة" و"أدخل معرف التعداد لإكمال EnumHeaderName".خطأ في بناء الجملة مماثل من javac.

ما الخطأ الذي افعله؟

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

المحلول

مستندات التعليقات التوضيحية للإسبات (http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/) تشير إلى أن هذا يجب أن يكون تعليقًا توضيحيًا على مستوى الفصل الدراسي بدلاً من أن يكون مضمّنًا داخل التعليمات البرمجية الخاصة بك.وبالفعل عندما ألصق هذا الرمز في IDE الخاص بي وأحركه، تكون أخطاء الترجمة موجودة عندما يكون التعليق التوضيحي مضمنًا، ولكنها تختفي عندما أضعها فوق إعلان الفصل:

@SqlResultSetMapping( name="TripResults",
        entities={
            @EntityResult( entityClass=TripEntity.class ),
            @EntityResult( entityClass=CommercialTripEntity.class )
        }
    )
public class Foo {
   public void bogus() {
      Query q = em.createNativeQuery( 
        "select T.* " +
        "from Trip T join Itinerary I on (T.itinerary_id=I.id) " +
        "where I.launchDate between :start and :end " +
        "or ADDDATE(I.launchDate, I.equipmentPullDayOfTrip) between :start and :end",
        "TripResults" );

      q.setParameter( "start", range.getStart(), TemporalType.DATE );
      q.setParameter( "end", range.getEnd(), TemporalType.DATE );
   }
}

...من الواضح أنه ليس لدي أي دليل على أن الكود أعلاه سيعمل بالفعل.لقد تحققت فقط من أنه لا يسبب أخطاء في الترجمة.

نصائح أخرى

المثال الخاص بك يأتي مباشرة من مستندات واجهة برمجة التطبيقات (API) التي تم تقديمها بشكل سيء للأسف.

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

يعد هذا عيبًا في طريقة التعليق التوضيحي (على عكس تحديد الأشياء في XML.) والعديد من الأشياء الأخرى في JPA (على سبيل المثال.الاستعلامات المسماة) يتم تعريفها بنفس الطريقة.إنه يجعل الأمر يبدو كما لو أن هناك نوعًا من الارتباط بين الشيء الذي يتم تعريفه والفئة التي تم التعليق عليها، في حين أنه ليس كذلك.

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