Author: fdesbois Date: 2010-02-18 14:04:14 +0100 (Thu, 18 Feb 2010) New Revision: 1802 Modified: trunk/topia-persistence/src/site/rst/FAQ.rst Log: Add naturalId explanations (Ano #235 : problem with indexes) Modified: trunk/topia-persistence/src/site/rst/FAQ.rst =================================================================== --- trunk/topia-persistence/src/site/rst/FAQ.rst 2010-02-11 21:46:40 UTC (rev 1801) +++ trunk/topia-persistence/src/site/rst/FAQ.rst 2010-02-18 13:04:14 UTC (rev 1802) @@ -57,3 +57,36 @@ Note L'ajout du throws TopiaException est automatique et n'a pas besoin d'être spécifié au niveau du modèle. + +Comment gérer une clé métier sur une entité (naturalId) ? +========================================================= + +Chaque entité possède une cré primaire topiaId, mais dans certains cas il est +important d'avoir une notion d'unicité sur une ou plusieurs propriétés d'une +entité, ce qu'on appele une clé métier. Le comportement souhaité serait de +préserver l'unicité sur ces propriétés ainsi que la création d'un index pour +optimiser l'accès aux données. + +Il est donc nécessaire de préciser cette notion au niveau du modèle, cela +par le biais du tagValue (également propriété hibernate) **naturalId** :: + + fr.ird.observe.entities.referentiel.ParametrageTaillePoidsFaune.class.tagvalue.naturalIdMutable=false + fr.ird.observe.entities.referentiel.ParametrageTaillePoidsFaune.attribute.sexe.tagvalue.naturalId=true + fr.ird.observe.entities.referentiel.ParametrageTaillePoidsFaune.attribute.ocean.tagvalue.naturalId=true + fr.ird.observe.entities.referentiel.ParametrageTaillePoidsFaune.attribute.ocean.tagvalue.notNull=false + fr.ird.observe.entities.referentiel.ParametrageTaillePoidsFaune.attribute.espece.tagvalue.naturalId=true + +Ici, les propriétés "sexe", "ocean" et "espece" forment la clé métier de +l'entité "ParametrageTaillePoidsFaune". Par défaut les propriétés +d'une clé métier sont non null, mais il est possible de préciser dans certains +cas qu'une propriété peut l'être (comme ici avec "ocean"). + +Le naturalId provoque trois résultats : + +- création d'un index unique en base. +- vérification dans hibernate de l'intégrité de l'entité à la création : + il est donc nécessaire de créer l'entité avec des valeurs pour les propriétés + de la clé métier (méthode create sur le dao). +- impossibilité de modifier les valeurs de ces propriétés sur une entité + existante ; à moins de le préciser dans la configuration via le tagValue + "naturalIdMutable" placé à "true" (déconseillé). \ No newline at end of file