2009-10-02 18 views
6

Ich arbeite an einer Webanwendung. Wir verwenden Hibernate als ORM in unserem Projekt. Tatsächlich erstellt unsere Anwendung basierend auf der Benutzerauswahl dynamisch einige Tabellen. Der Benutzer kann den Tabellennamen und den Spaltennamen auswählen und dann Daten aus einer CSV-Datei importieren. Meine Frage ist also: Wie mappe ich diese dynamisch erzeugte Tabelle mit Hibernate- und Java-Objekten?Wie dynamisch erstellte Tabelle in Hibernate?

Antwort

10

Es kann dynamisch erfolgen, aber es ist etwas chaotisch:

Sie werden ändern müssen, um dynamisch Objekt Konfiguration des Hibernate vor Session gebaut wird. Wenn Sie Spring verwenden, können Sie dies durch Überschreiben der postProcessAnnotationConfiguration() Methode von AnnotationSessionFactoryBean; Ansonsten müssen Sie es nur mit Ihrem Konfigurationsobjekt ausführen, bevor Sie darauf buildSessionFactory() aufrufen.

Wenn Sie dies ohne Neustart der Anwendung tun müssen, müssen Sie entweder Ihre SessionFactory neu erstellen (was bedeutet, dass Ihre Benutzer warten müssen, bis dies erledigt ist) oder eine separate SessionFactory-Instanz speziell für Ihre benutzerdefinierten Klassen verwenden ist fast unmöglich, wenn Ihre benutzerdefinierten Klassen auf Ihre integrierten Klassen verweisen müssen).

Sie können über configuration.getMappings() auf Klassen-/Tabellenzuordnungen zugreifen. Sie müssen dann ein neues Tabellen-Mapping über Table API erstellen und es über addTable() zur Konfiguration hinzufügen. Dasselbe muss mit PersistentClass getan werden, was eine Klassenzuordnung darstellt. Wenn Sie dieselbe Klasse zum Darstellen mehrerer Entitäten verwenden (z. B. mehrere Tabellen zuordnen), müssen Sie eindeutige Entitätsnamen für jede Entität verwenden. Sie müssen dies bei jedem Neustart der App durchführen (ändern Sie die Konfiguration).

2

Wie viele der Tabellen werden dynamisch erstellt? Sind die Tabellen ähnlich und ändern Sie nur den Namen der Datenbank? Hier

ist eine Diskussion über die Änderung der Tabellenname: http://www.experts-exchange.com/Programming/Languages/Java/J2EE/Frameworks/Spring/Q_24237099.html

Wenn Sie völlig eine neue Tabelle erstellen, können Sie einen Blick verwenden und nur direkte Menschen zu einer Ansicht?

Warum verwenden Sie Hibernate dafür, anstatt nur dynamisch Abfragen in JDBC zu erstellen?

+0

Ich stimme zu, die Verwendung von Hibernate für dieses Problem ist nicht korrekt. – sbidwai

0

Die Datenbanklösung - Sie können eine Ansicht erstellen und auf eine Tabelle oder eine andere verweisen (vorausgesetzt, die Struktur ist identisch).

CREATE VIEW HIBERNATE_NAME als SELECT * FROM TABLE_A

oder VIEW HIBERNATE_NAME als SELECT * FROM Table_B

CREATE würden Sie Ihre Anwendung benötigen nativen SQL (DDL) ausführen, jedoch diese sollte einfacher sein als Hibernate Hacks

Verwandte Themen