Bonjour,
Apparement hibernate exige de définir une clé primaire pour la table à mapper. Sachant que j'ai une table sans clé primaire, et que je pourrais pas modfier, il y a une solution pour faire le mapping ???
Merci
Bonjour,
Apparement hibernate exige de définir une clé primaire pour la table à mapper. Sachant que j'ai une table sans clé primaire, et que je pourrais pas modfier, il y a une solution pour faire le mapping ???
Merci
Dans ce cas je crois que la solution conseillée est de spécifier une clé composite qui prend tous les attributs de l'entité
Hum, euh, je crois avoir déjà dit que TOUTE table possédait une clé sous peine de doublons inévitables dans ta table ... dans la mesure où tu parles ici de villes ... j'ose penser que le but n'est pas d'avoir 50 fois la même ville dans ta table.
Les clés de table sont de deux natures : techniques ou fonctionnelles. Dans le premier cas, tu trouveras dès lors un identifiant technique (id_ville) incrémenté automatiquement ou via un générateur de clé externe. Dans le second, parmi les champs existants dans ta table, certains sont uniques lorsqu'ils sont ensemble; ce qui permet dès lors de s'assurer que deux enregistrements distincts ne pointeront JAMAIS sur le même objet (entité), contrairement a la clé technique qui est plus explicite certes mais dont le contenu peut se retrouver en doublons après tout.
Pour une ville, par exemple, on peut identifier le couple Code Postal / Nom de la Ville comme identifiant (pour une ville française par exemple) puisque, deux villes peuvent avoir le même nom, deux villes peuvent avoir même CP mais un couple CP/Ville ne peut se trouver en doublons (sinon, bonne chance pour le facteur)
Si jamais ton SGBDR accepte les tables sans clé primaire ... il doit donc exister tout de même une clé fonctionnelle au sein de ta table (et non déclaré comme clé primaire (ou composite) au sein du SGBD. C'est cette clé qui te permettra de préciser à Hibernate comment distinguer deux objets. (donc il faut déclarer ce(s) attribut(s) comme clé(s) primaire(composites).
Bon courage pour la suite !
PS: Essaie de ne pas créer un post à chaque question que tu veux poser ... tu as un problème de départ dans un post ... reste dans ce post pour poser tes autres questions si elles sont liées à ton premier problème. Merci.
Je suis assez d'accord avec ce que tu dis Bizur, mais ça ne répond pas vraiment à la question.
Il y a des fois ou tu dois travailler sur des tables que tu ne peux pas modifier et qui n'ont pas de clé primaire. Par exemple des tables temporaires qui sont alimentées par un autre outil qui te garantit l'absence de doublons.
Enfin tout ça pour dire, que la théorie, c'est bien, mais que dans son cas, ça ne lui sert pas à grand chose.
Possible en effet, mais que l'on soit d'accord, son problème est tiré d'un autre thread où il voulait mapper une ville avec une table ville (composée de quelques champs) a laquelle on peut tout a fait trouver une clé fonctionnelle.
Ce que j'essayais donc de dire ici, en plus de ma partie "theorique", c'est que sa solution est trouvable via l'indice de the-gtm, à savoir utiliser des composite-key pour CP/Ville ou bien un champ "code" si ca dernier existe (cf. le thread sur lequel le problème est évoqué).
Après, si son problème ne possède vraiment aucune clé, la solution de the-gtm, semble la meilleure ... A CONDITION qu'aucun doublon ne soit présent en base ... sinon je ne vois pas comment Hibernate pourra faire pour distinguer deux objets identiques en tant que deux enregistrements identiques![]()
Partager