2008-11-20 8 views
5

J'ai une table dans ma base de données MYSQL qui n'a pas de clé primaire, mais qui a une clé unique sur deux colonnes. Lorsque vous utilisez l'outil de reverse engineering Hibernate de MyEclipse pour créer un mapping pour cette table, il génère deux classes, une pour named après la table elle-même, et une avec un suffixe "Id". Il semble que la plupart des méthodes utiles se sont retrouvées dans la classe Id, il semble donc que ce soit celui que vous instanciez et sauvegardiez pour conserver les données. Je peux comprendre le fait que la classe Id est créée afin de représenter une ligne unique dans l'objet table/mappé, mais à quoi cela sert-il de diviser cela en deux classes, et quoi, alors est l'utilisation du non-Id -suffixé classe? Mon collègue fait valoir que vous pouvez accomplir la même chose avec une seule classe et se moque de l'utilisation de l'ingénierie inverse pour ces tables qui n'ont pas de clé primaire. Pour ma part, je suppose que les développeurs de MyEclipse sont beaucoup plus intelligents que moi et qu'il y a une très bonne raison de le faire de cette façon. Y a-t-il?Pourquoi l'ingénierie inverse Hibernate de MyEclipse crée-t-elle plusieurs classes lors du mappage de certaines tables?

Répondre

0

Vous supposez trop mon ami. Ces outils ne proviennent pas réellement de l'équipe MyEclipse, mais du projet Hibernate Tools (JBoss, les développeurs d'Hibernate).

Ceci est un outil de programmation qui ne peut pas tout deviner. C'est assez bon pour les choses simples bien anotées, mais parfois, ça ne va pas générer exactement ce dont vous avez besoin.

La classe d'identification est généralement nécessaire pour représenter une clé primaire composite (une clé utilisant plusieurs attributs). Il utilise les classes de composants Hibernate concept.

Il est également possible de modifier un peu les options du générateur.

Dans votre cas, il serait préférable de faire comme vos collègues le disent. Créez vos propres classes d'entités.

0

Dans votre fichier désosser:

<table schema="public" name="yourtable"> 
      <primary-key> 
       <!-- generator may not be necessary for mysql --> 
       <generator class="increment"></generator> 
       <key-column name="column_name_of_primary_key" /> 
      </primary-key> 
     </table> 
0

J'ai eu un problème similaire en cours d'exécution de l'outil dans Eclipse contre une instance teradata. J'avais plusieurs vues à inverser, et ils étaient dans un schéma. Je recevais la classe AcxiomDataId générée par ceci:

<table catalog=".*" schema="U01TKE_GRPR_RADMT_VW" name="F_ACXM_MBR" class="AcxiomData"> 
    <primary-key> 
     <generator class="increment"></generator> 
     <key-column name="MBR_UNIQ_KEY" property="memberUniqKey" /> 
    </primary-key> 
</table> 

Mais la suppression du schéma et attributs catalogue à partir de l'élément de table, je n'ai pas la classe AcxiomDataId:

<table name="F_ACXM_MBR" class="AcxiomData"> 
    <primary-key> 
     <generator class="increment"></generator> 
     <key-column name="MBR_UNIQ_KEY" property="memberUniqKey" /> 
    </primary-key> 
</table> 

Aucune idée pourquoi.

0

Je suis confronté au même problème. Je pense que lorsque vous n'avez aucune clé dans la table, cela génère deux classes. Sinon, si vous avez une clé dans la table, elle n'en génère qu'une seule.

Au moins pour moi après avoir ajouté une clé primaire dans la table, il génère une seule classe représentant la table. Si je supprime la clé primaire, il génère deux classes.

Ancien fil, mais j'ai pensé utile pour quelqu'un.

0

Vous devez entrer dans yout db et vérifier si vous avez déjà défini un champ comme clé primaire, puis le fichier de reverse engineering d'hibernation, ne faites plus de classe multiple.

Questions connexes