Domanda

Siamo spiacenti di fastidio - forse questa è una domanda molto semplice - ma per qualche motivo la versione di seguito non riesce a ottenere analizzato, mentre la versione con il set funziona bene. In effetti, se mi basta prendere la variante di set e sostituire insieme con la lista ottengo:

eccezione annidata è org.hibernate.InvalidMappingException: Impossibile analizzare documento di mappaggio dalla mappatura valida

Grazie 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>
È stato utile?

Soluzione

Hai detto

  

mentre la versione con il set funziona bene

Qui va lista 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 si può vedere, elemento list ha bisogno sia indice o elemento della lista-index , un elemento chiave, e una delle seguenti opzioni

  • elemento
  • uno-a-molti
  • molti-a-molti
  • composite-element
  • many-to-any

Qui va lista-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">

Quindi, si dovrebbe usare

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

Ma se si desidera utilizzare un elenco invece di un set di e non dispone di una colonna dell'elenco-index , è possibile utilizzare un sacchetto posto. Inizializza come segue

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

E definire questa mappatura invece

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

Altri suggerimenti

In Hibernate, un elenco deve specificare una colonna di indice.

Si veda la sezione 6.2.3 della documentazione Hibernate .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top