Salut, Je viens de corriger un bug de génération de mapping et du coups je tombe sur un code bien mystérieux concernant la gestion de l'inverse sur les relations many-2-many : // On ne met le inverse="true" uniquement pour un seul coté de la relation. // Dans le cas contraire, les modifications dans la relation ne seront // pas sauvegardées. Ceci n'est vrai que si les deux coté sont navigable boolean isInverse = attr.isNavigable() && attr.getReverseAttribute().isNavigable(); //isInverse |= !Util.isFirstAttribute(attr); //isInverse = false; // 20070117 poussin: pour du many, jamais de inverse // Modification FD-2010-04-01 : // Le tagvalue "inverse" permet de spécifier qui possède le // inverse="true". Il est impératif de l'utiliser sur les deux // extrémités pour ne pas avoir de surprise. String inverseValue = TopiaGeneratorUtil.getInverseTagValue(attr); if (StringUtils.isNotEmpty(inverseValue)) { isInverse &= Boolean.parseBoolean(inverseValue); // Si aucun tagvalue n'est défini, le choix est arbitraire : le // premier attribut dans l'ordre alphabétique sera choisi pour porter le // inverse="true" } else { isInverse &= GeneratorUtil.isFirstAttribute(attr); } Moi je vous avoue ne rien y comprendre dans cette gestion stricte (inverse sur les deux targets avec un boolean a True ou a False) ou bien choisir celui de plus petit ordre alphabétique ? Euh... Ca sert à quoi ? Je serais vraiment d'avis qu'on revoit cette gestion regrettable. Pour moi on ne doit pas laisser le second mode qui rend la gestion de la relation dépendante du nom des relations (pfff... d'où ça sort cette blague :)). Après laisser deux tag-values (une sur chaque extrémité) ne m'emballe guère car une seule tag value sur le maître me parait suffisant. Pourquoi ne pas plutôt utiliser une nouvelle tagValue (car inverse ça veut pas dire grand chose en fait en terme de modélisation...) qui indique qui est le propriétaire de la relation, on pourrait alors en déduire l'attribute inverse nécessaire pour le mapping hibernate. Si la relation n'est pas présente, on déclanche une exception histoire d'être safe. Pour le nom de la nouvelle tag value, je sais pas trop vu que j'utilise jamais ce genre de relation (j'en ai de la chance :)) : - relationOwner - relationMaster Merci pour vos réponses constructives :) -- Tony Chemit -------------------- tél: +33 (0) 2 40 50 29 28 email: chemit@codelutin.com http://www.codelutin.com