Pour plus de commodité, un identifiant composite peut être mis en oeuvre via une classe de type valeur séparée. L'identifiant primaire a juste un attribut ayant le type class. La classe séparée doit être définie comme classe de type valeur. La correspondance de classe de composant sera alors générée.
Dans l'exemple ci-dessous, trois attributs liés au nom sont groupés dans une classe distincte Name. Cette classe est mise en correspondance avec la même table que la classe Person. L'identifiant primaire généré se présente comme suit :
<composite-id name="name" class="identifier.Name"> <key-property name="firstName"> <column name="name_firstName" sql-type="text"/> </key-property> <key-property name="middleName"> <column name="name_middleName" sql-type="text"/> </key-property> <key-property name="lastName"> <column name="name_lastName" sql-type="text"/> </key-property> </composite-id>
Remarque : La classe de type valeur doit réaliser l'interface java.io.Serializable, qui met en oeuvre les méthodes equals() et hashCode().