Ce document décrit les choix de mapping faits en fonction du diagramme de classe UML.
Tous les objets utilisent le versionnement dans un champs version:
<version name="topiaVersion" type="long" node="@topiaVersion"/>
On utilise les méthodes d'accès pour accêder aux propriétés
Seules les classes concrêtes ont un mapping (au travers de l'interface + impl)
Chaque classe à un fichier de mapping séparé.
On utilisera union-subclass
Lors de la description de la classe, on peut indiquer de ne pas générer de clé technique. Dans ce cas, la clé métier est utilisée (tagvalue: technicalKey=false). Par défaut une clé technique est utilisée et est de la forme uuid.hex:
<id name="topiaId" column="topiaId" type="string"> <generator class="uuid.hex"/> </id>
La description de la clé métier est faite par un tagvalue sur la classe (tagvalue: key=prop1,prop2,prop3). Si une clé technique est utilisée, une contrainte d'unicité est tout de même faite sur la clé métier.
La clé métier sert aussi pour le toString, equals, hashCode.
Si l'id d'une entité est composé de plusieurs champs, ces champs doivent-être rassemblés dans une classe indépendante de l'entité. Par contre le mapping assemble l'entity et son id dans la même table:
<composite-id name="#field" class="#class"> <key-property name="#field1" column="#col1"/> <key-property name="#field2" column="#col2"/> <key-property name="#field3" column="#col3"/> </composite>
Si l'id est un objet simple il peut être directement mis dans l'entité.