Frage

Leider stören - vielleicht ist dies eine sehr einfache Frage - aber aus irgendeinem Grunde die Version nicht unter analysiert werden, während die Version mit einem Satz gut funktioniert. In der Tat, wenn ich die Set-Variante nehme nur und ersetzen mit Liste gesetzt erhalte ich:

verschachtelte Ausnahme ist org.hibernate.InvalidMappingException: Kann nicht analysiert Mapping-Dokument von ungültigem Mapping

Danke Misha

    <!-- 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>
War es hilfreich?

Lösung

Du hast gesagt,

, während die Version mit Satz funktioniert

Hier geht Liste 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*
)>

Ass Sie können sehen, Listenelement muss entweder Index oder list-Index Element , ein Schlüsselelement, und eine der folgenden Optionen

  • -Element
  • one-to-many
  • many-to-many
  • Composite-Element
  • many-to-any

Hier geht list-Index 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">

So sollten Sie verwenden

<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>

Aber wenn Sie eine Liste statt eines Satzes verwenden möchten, und haben keine Liste-Index-Spalte , Sie stattdessen eine Tasche verwenden können. Initialisieren wie folgt

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

Und definieren diese Zuordnung statt

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

Andere Tipps

In Hibernate, eine Liste muss eine Indexspalte angeben.

Siehe Abschnitt 6.2.3 der Hibernate Dokumentation .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top