السبات واحد إلى العديد من الخرائط تعمل مع قائمة ولكن ليس مجموعة؟

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

سؤال

آسف لإزعاج - ربما هذا سؤال بسيط للغاية - ولكن لسبب ما فشل الإصدار أدناه في التحليل ، في حين أن الإصدار مع مجموعة يعمل بشكل جيد. في الواقع ، إذا أخذت فقط الإصدار المحدد واستبدلت المجموعة بقائمة أحصل عليها:

الاستثناء المتداخل هو org.hibernate.invalidMappingException:

شكرا لك ميشا

    <!-- bi-directional one-to-many association to SpreadsheetImportTemplateColumn -->
    <list name="columns">
<!--
    <set name="columns" lazy="false" inverse="true"
        cascade="all-delete-orphan" sort="natural"
        order-by="voided asc, preferred desc, date_created desc">
-->
        <key column="template_id" not-null="true" />
<!--
        <one-to-many class="SpreadsheetImportTemplateColumn" />
    </set>
-->
    </list>
هل كانت مفيدة؟

المحلول

أنت قلت

في حين أن الإصدار مع مجموعة يعمل بشكل جيد

هنا يذهب قائمة doctype

<!ELEMENT list (
    meta*,
    subselect?,
    cache?,
    synchronize*,
    comment?,
    key, 
    (index|list-index), 
    (element|one-to-many|many-to-many|composite-element|many-to-any),
    loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?,
    filter*
)>

الحمار التي يمكنك رؤيتها ، قائمة القائمة يحتاج إما عن عنصر الفهرس أو القائمة المؤشر, ، عنصر رئيسي ، وواحد مما يلي

  • عنصر
  • واحد لكثير
  • الكثير للكثيرين
  • عنصر مركب
  • كثير إلى أي شخص

هنا يذهب القائمة المؤشر doctype

<!-- Declares the type and column mapping for a collection index (array or list index, or key of a map). -->

<!ELEMENT list-index (column?)>
<!ATTLIST list-index column CDATA #IMPLIED>
<!ATTLIST list-index base CDATA "0">

لذلك يجب أن تستخدم

<list name="columns">
    <key column="template_id" not-null="true"/>
    <list-index column="WHICH COLUMN SHOULD BE USED AS INDEX"/>
    <one-to-many class="SpreadsheetImportTemplateColumn" />
</list>

ولكن إذا كنت ترغب في استخدام قائمة بدلاً من مجموعة وليس لديه عمود مؤشر قائمة, ، يمكنك استخدام حقيبة بدلاً من ذلك. تهيئة على النحو التالي

Collection<SpreadsheetImportTemplateColumn> columns = new ArrayList<SpreadsheetImportTemplateColumn>();

وتحديد هذا التعيين بدلاً من ذلك

<bag name="columns">
     <key column="template_id" not-null="true"/>
     <one-to-many class="SpreadsheetImportTemplateColumn"/>
</bag>

نصائح أخرى

في Hibernate ، يجب أن تحدد القائمة عمود فهرس.

انظر القسم 6.2.3 من الوثائق السباتية.

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