2008-11-20 1 views
5

Ich habe eine Tabelle in meiner MYSQL-Datenbank, die keinen Primärschlüssel hat, aber einen eindeutigen Schlüssel für zwei Spalten hat. Wenn Sie das Hibernate-Reverse-Engineering-Tool von MyEclipse verwenden, um ein Mapping für diese Tabelle zu erstellen, generiert es zwei Klassen, eine für den Namen nach der Tabelle selbst und eine mit einem "Id" -Suffix. Es scheint, dass die meisten der nützlichen Methoden in der Id-Klasse gelandet sind. Es scheint also, dass diese Methode instanziiert und gespeichert wird, um Daten persistent zu machen. Ich kann die Tatsache schätzen, dass die Id-Klasse erstellt wird, um eine eindeutige Zeile in der Tabelle/dem gemappten Objekt darzustellen, aber was wird verwendet, um dies in zwei Klassen aufzuteilen, und was ist dann die Verwendung der Nicht-ID -suffixed Klasse?Warum erstellt das Hibernate Reverse-Engineering von MyEclipse beim Zuordnen bestimmter Tabellen mehrere Klassen?

Mein Kollege argumentiert, dass Sie das gleiche mit nur einer Klasse erreichen können und spottet das Reverse Engineering für diese Tabellen, die keinen Primärschlüssel haben. Ich nehme andererseits an, dass MyEclipse-Entwickler viel schlauer sind als ich und dass es einen wirklich guten Grund gibt, dies auf diese Weise zu tun. Ist da?

Antwort

0

Sie nehmen zu viel mein Freund. Diese Tools stammen nicht vom MyEclipse-Team, sondern vom Projekt Hibernate Tools (JBoss, die Entwickler von Hibernate).

Dies ist ein programmatisches Tool, das nicht alles erraten kann. Es ist ziemlich gut für einfache Dinge, gut annotiert, aber manchmal wird es nicht genau das erzeugen, was Sie brauchen.

Die ID-Klasse wird normalerweise benötigt, um einen zusammengesetzten Primärschlüssel darzustellen (ein Schlüssel, der mehrere Attribute verwendet). Es verwendet das Komponentenklassen-Hibernate-Konzept.

Es ist auch möglich, die Generatoroptionen ein wenig zu optimieren.

In Ihrem Fall wäre es am besten zu tun, wie Ihre Kollegen sagen. Erstellen Sie eigene Entitätsklassen.

0

In Ihrer Reverse Engineering-Datei:

<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

hatte ich ein ähnliches Problem das Tool in Eclipse gegen eine Teradata-Instanz ausgeführt wird. Ich hatte mehrere Ansichten, um umzukehren, und sie waren in einem Schema. Ich war die AcxiomDataId Klasse mit dieser erzeugt bekommen:

<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> 

Aber das Entfernen des Schemas und Katalogattribute aus dem Tabellenelement, ich habe nicht die AcxiomDataId Klasse erhalten:

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

keine Ahnung, warum das so ist.

0

Ich habe das gleiche Problem. Ich denke, wenn Sie keinen Schlüssel in der Tabelle haben, dann erzeugt es zwei Klassen. Wenn Sie andernfalls einen Schlüssel in der Tabelle haben, wird nur einer generiert.

Zumindest für mich nach dem Hinzufügen eines Primärschlüssels in der Tabelle erzeugt es nur eine Klasse, die die Tabelle darstellt. Wenn ich den Primärschlüssel entferne, erzeugt er zwei Klassen.

Alter Thread, aber ich dachte nützlich für jemanden.

0

Sie müssen in yout db gehen und prüfen, ob Sie bereits ein Feld als Primärschlüssel festgelegt haben, dann die Hibernate Reverse Engineering-Datei, machen Sie keine Mehrfachklasse mehr.

Verwandte Themen