2009-08-02 10 views
6

Wenn ich meine Hibernate-Tools ausführen liest es aus der db und Java-Klassen für jede Tabellen, und eine Java-Klasse für Composite-Primärschlüssel erstellen. das ist großartig.Hibernate Tool Annotation Generation ohne das "Katalog" -Attribut

das Problem ist, diese Linie

@Table(name="tst_feature" 
    ,catalog="tstdb" 
) 

während der Tabellenname erforderlich ist, der „Katalog“ Attribut ist nicht erforderlich. manchmal möchte ich „tstdb“ verwenden, manchmal i „tstdev“

ich dachte, verwenden möchten, welche db gewählt wurde auf der JDBC-Verbindung url hängt , aber wenn ich die JDBC-URL ändern, um „tstdev“ zu zeigen, es mit „tstdb“ ist noch

so, ich weiß, was getan werden muss wissen einfach nicht, wie seine sind meine Optionen

getan wird
  • unterdrücken die Erzeugung des Attributs „Katalog“ Derzeit mache ich das manuell (nicht sehr produktiv) oder ich könnte ein Programm schreiben, das die Java-Datei und entfernen Sie das Attribut manuell parst aber ich hoffe, ich habe nicht zu

ODER

  • einen Weg finden, zu sagen, Hibernate, um das Attribut "catalog" zu ignorieren und das explizit angegebene Schema zu verwenden. ich weiß nicht, die genaue Einstellung, die ich ändern muss, um dies zu erreichen, oder auch wenn die Option verfügbar ist.

Antwort

7

Sie müssen 3 Schritten folgen -

1) In den hibernate.cfg.xml, fügen Sie diese Eigenschaft

hibernate.default_catalog = MyDatabaseName 

(wie in obigem Beitrag angegeben)

2) Im hibernate.reveng.xml, fügen Sie alle die Tabelle filtert so

table-filter match-name="MyTableName" 

(nur Damit kein Katalogname hier)

3) Regenerieren Hibernate Code

Sie keine Katalognamen in einem der *.hbm.xml Dateien sehen.

Ich habe Eclipse Galileo und Hibernate-3.2.4.GA verwendet.

1

Es gibt eine Anpassung an die Generation, die sagen wird, welche Tabellen in welchen Katalog eingefügt werden sollen.

Sie können den Katalog manuell (in Revend-Datei, <table> Element) oder programmgesteuert (in Ihrer benutzerdefinierten ReverseEngineeringStrategy-Klasse, wenn ich mich gut erinnere).

Außerdem musste ich kürzlich die Generierungsvorlagen ändern.

Siehe die Referenzdokumentation:

Entschuldigung, das könnte genauer werden, aber ich habe gerade keinen Zugriff auf meinen Arbeitscomputer.

+0

Tabellenelement wählt Tabellen aus den Katalogen, ja. aber das ist nicht ich will. ich will das Unternehmen ohne den „Katalog“ -Attribut es Attribut ist, unabhängig davon, ob der Katalog generiert werden, was meine JDBC-URL ist, würde es zeigen weiterhin auf das gleiche Schema, i wechseln können, will Schema ohne die Entitäten neu zu generieren. –

+0

nahm ich einen Blick auf die FTL-Dateien es eine Zeile, die sagt <#if clazz.table.catalog? Existiert> , Katalog = „$ {clazz.table.catalog}“ jede Idee, wie zu tun ich setze das auf falsch? –

+1

Ich fand es heraus Verwenden Sie xxx in Ihrer Datei hibernate.cfg.xml –

0

Das Attribut Katalog ist ein „Verbindung“ Attribut und soll *.hbm.xml in der „Verbindung“ config-Datei hibernate.cfg.xml und nicht in einer „Daten“ Konfigurationsdatei angegeben werden.

Ich generiere Hibernate-Code über Ant-Task <hibernatetool> und ich legte diese ersetzen Aufgabe nach der Regeneration (ersetzen Schemaname durch Ihre Datenbank).

<replace dir='../src' token='catalog="schema-name"' value=''> 

Nach der Generierung wurde der Attributkatalog entfernt.

Dies ist eine Problemumgehung, aber Code generiert funktioniert in meiner Entwicklung eine Produktionsumgebung mit anderen Schemaname.

Verwandte Themen