2010-08-27 8 views
1

Désolé de déranger - c'est peut-être une question très simple - mais pour une raison quelconque, la version ci-dessous ne parvient pas à être analysé, alors que la version avec jeu fonctionne très bien. En fait, si je prends juste la version set et remplaçons série avec la liste que je reçois:Hibernate un à plusieurs cartographie fonctionne avec une liste mais pas un ensemble?

exception imbriquée est org.hibernate.InvalidMappingException: Impossible d'analyser le document de cartographie de la cartographie invalide

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> 

Répondre

5

Vous avez dit

alors que la version avec ensemble fonctionne très bien

va ici 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 vous pouvez voir, élément de la liste besoins soit index ou liste- élément d'index, élément clé, et l'un des éléments suivants

  • élément
  • one-to-many
  • beaucoup à plusieurs
  • composite élément
  • many-to-any

Ici va 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"> 

Vous devriez donc 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. Initialiser comme suit

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

Et définir cette cartographie au lieu

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

réponse très exhaustive, +1 –