Mise en veille prolongée un à plusieurs travaux de cartographie avec une liste, mais pas un ensemble?

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

Question

Désolé de la peine - peut-être cela est une question très simple - mais pour une raison quelconque la version échoue ci-dessous pour analysable, alors que la version avec ensemble fonctionne très bien. En fait, si je prends juste la version set et remplacer ensemble avec la liste que je reçois:

exception imbriquée est org.hibernate.InvalidMappingException: Impossible d'analyser le document de mise en correspondance de la cartographie non valide

Merci 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>
Était-ce utile?

La solution

Vous avez dit

  

alors que la version avec ensemble fonctionne très bien

Voici la liste va 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 vous pouvez voir, élément de la liste doit soit l'indice ou élément liste index , un élément clé, et une des options suivantes

    élément
  • one-to-many
  • many-to-many
  • composite-element
  • many-to-any

Voici la liste va DOCTYPE index

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

Vous devez utiliser

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

Mais si vous voulez utiliser une liste au lieu d'un ensemble et n'a pas de colonne list-index , vous pouvez utiliser un sac à la place. Initialize suit comme

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

Et définir au lieu ce mapping

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

Autres conseils

Mise en veille prolongée, une liste doit spécifier une colonne d'index.

Voir la section 6.2.3 du documentation Hibernate .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top