هل يمكنني وضع التعليقات التوضيحية لمعالجات متعددة في فئة Java؟

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

  •  06-07-2019
  •  | 
  •  

سؤال

لست متأكدًا حقًا من كيفية عمل التعليقات التوضيحية فعليًا.أنا أستخدم JAXB وJPA (مع Eclipselink) في نفس الفئات، أي.ه.أحصل على تعريفات الفصل مثل هذا:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Channel")
@Entity
public class Channel extends NamedEntity {
    @XmlAttribute
    @XmlSchemaType(name = "anyURI")
    @Column(name="url")
    protected String url;

    @XmlAttribute
    @Column
    protected String coDirection;
    // etc...
}

أتلقى الآن أخطاء غريبة (على سبيل المثال "com.econemon.suite.common.models.Channel@115c974 ليس نوعًا معروفًا من الكيانات" وهو ما يعني عادةً أن الفصل ليس موجودًا في ملف الثبات xml الخاص بي) وأنا أتساءل ما إذا كانت التعليقات التوضيحية سوف تتداخل مع بعضها البعض؟

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

المحلول

وتعليق توضيحي لا تستطيع أن تتدخل تعليق توضيحي الآخرين، وإسبانيا. لا إذا جاء من مجموعات مختلفة ولها أسماء مختلفة. كل إطار (JAXB والسبات) يكون هناك الشروح الخاصة. كل إطار التأمل فقط هناك الشروح الخاصة. أنا متأكد جدا أن هذه ليست المشكلة هنا.

ويرجى مراجعة كيان لديك هذا:

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

وب) الشرحid على حقل أو جالبة (نحن دائما استخدام الشروح الميدانية القائمة على خلاف أبدا مزيج JPA جالبة الشرح مع الشرح حقل في نوع!)

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

ود) نوع لديهEntity الشرح

وإذا كنت تستخدم الميراث (تمتد NamedEntity)، لديك لإعطاء المزيد من النقابة مزيد من المعلومات كيف ما يجب تعيين هذا. في أول محاولة لإزالة يمتد NamedEntity الاشياء. ومن النظر في نقابة الصحفيين تعليمي جيد وهو ما يفسر المتغيرات الميراث.

نصائح أخرى

لا، لا يفعلون ذلك.

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

الشيء الذي لم يتم ذكره في رسالتي (لأنني اعتقدت أنه غير ذي صلة) هو أنني أقوم بتشغيل هذا داخل حاوية OSGi (فيليكس إذا كان ذلك مهمًا).الآن، تحمي هذه الحاوية "حزمًا" مختلفة عن بعضها البعض، بحيث لا يمكنها رؤية فئات بعضها البعض حتى تقوم "بتصدير" الحزم على وجه التحديد.

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

لذا، إذا كنت تستخدم JPA مع حزم OSGi، فيجب عليك التأكد مما يلي:

  • توجد الفئات المشروحة وresistence.xml معًا في نفس الحزمة
  • تقوم هذه الحزمة بتصدير الحزمة التي تحتوي على الفئات المشروحة
  • يتم إدراج وحدة (وحدات) الثبات في ملف بيان الحزمة

يمكنك بعد ذلك القيام بأشياء الثبات الفعلية (مثل الاتصال بـ EntityManager.persist) في حزم مختلفة.

كملاحظة جانبية، حصلت أخطاء غريبة بالمثل عند محاولة استخدام تعليقات JAXB التوضيحية عبر الحزم.يبدو أنه يجب إنشاء مثيل JAXBContext و/أو ObjectFactory في نفس الحزمة التي تحتوي على الفئات المشروحة.لم أتمكن حقًا من حل هذا الأمر، لكن وضع الأشياء في نفس الحزمة ساعدني.

سيكون أمرًا رائعًا أن يتمكن شخص لديه فهم أعمق لـ OSGi وتحميل الفصل والتعليقات التوضيحية من التعليق على ما قد يحدث هنا.

تحديث:قد يمكّنك تصدير/استيراد حزم التعليقات التوضيحية المناسبة من الحصول على Persistence.xml والفئات المشروحة في حزم مختلفة، راجع هنا.لم تختبر، رغم ذلك.

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