Kann Hibernate verwendet werden, um HashMaps von Daten ohne Klassen zu speichern, um ihre Struktur darzustellen?

9

Ich habe praktisch keine Erfahrung mit Hibernate, obwohl ich zuvor ähnliche Persistenzbibliotheken in anderen Sprachen verwendet habe. Ich arbeite an einem Java-Projekt, das eine Möglichkeit zur Definition von "Modellen" (im MVC-Sinne) in Textkonfigurationsdateien, die automatische Generierung der Datenbanktabellen und (im Idealfall) die Datenbank-Backend-Agnostik erfordert. Soweit ich das durch ein schnelles Googeln feststellen kann, ist Hibernate die einzige weit verbreitete Backend-agnostische Java-Datenbankbibliothek; während ich meine eigene Kompatibilitätsebene zwischen meinem Modellsystem und mehreren DB-Backends schreiben könnte, ist das ein Debugging-Projekt, das ich möglichst vermeiden sollte.

Meine Frage lautet: Kann Hibernate verwendet werden, um Daten zu speichern, deren Struktur auf eine andere Weise als eine mit Anmerkungen versehene Java-Klassendatei dargestellt wird, z. B. eine HashMap mit einem Konfigurationsobjekt, das ihre Struktur beschreibt? Und wenn nicht, gibt es noch andere relativ stabile Java-Datenbankbibliotheken, die diese Funktionalität bieten könnten?

BEARBEITEN: Hier ist eine klarere Beschreibung dessen, was ich erreichen möchte:

Ich schreibe eine Datenmodellierungsbibliothek. Wenn eine bestimmte Methode der Bibliothek aufgerufen und ein Konfigurationsobjekt (geladen aus einer Textdatei) übergeben wird, sollte ein neues "Modell" erstellt und gegebenenfalls eine Datenbanktabelle für dieses Modell erstellt werden. Die Bibliothek kann nach Elementen dieses Modells abgefragt werden, die HashMaps mit den Feldern der Modelle zurückgeben sollen. Es sollte auch ermöglichen, dass HashMaps in der Datenbank gespeichert werden, vorausgesetzt, ihre Struktur stimmt mit den Konfigurationsdateien überein. Keines dieser Modelle sollte durch tatsächlich kompilierte Java-Klassen repräsentiert werden.

    
Adam R. Nelson 19.12.2012, 06:09
quelle

3 Antworten

4

Ich denke, Sie könnten versuchen, @MapKey Annotation von JPA (nicht die Hibernate @ MapKey Annotation, es ist ziemlich anders!) verwenden.

%Vor%     
Kamil 19.12.2012 06:26
quelle
1

Ich glaube nicht, dass Hibernate Ihnen eine Map als @Entity zur Verfügung stellen wird, aber Sie können eine benutzerdefinierte Klasse mit einem Kartenfeld verwenden:

%Vor%

(Beispiel aus Hibernate-Dokumenten)

Außerdem müssen Sie keine Anmerkungen verwenden (wenn Sie das vermeiden möchten): Hibernate-Beziehungen können über XML-Dateien beschrieben werden, und es gibt Dienstprogramme (beispielsweise Maven-Plugins), die automatisch die notwendigen generieren können Java Pojos aus dem XML.

Benötigt Ihr Modell eine relationale Datenbank? Sie könnten eine Datenbank wie Mongo in Erwägung ziehen, die jedes Objekt speichert, das Sie mit JSON darstellen können.

    
Mark 19.12.2012 06:27
quelle
0

Sie können den Ruhezustand so konfigurieren, dass er ohne Entity-Klassen (mit Tabellen verknüpfte Beans) arbeitet. 1. Sie müssen hierfür die XML-Konfiguration verwenden. anstelle von class verwenden Sie entity-name und anstelle von <property name="something" verwenden Sie <property node="something" .

  1. Erstellen Sie eine Hibernate-Sitzung mit entiy-mode als map.

Sie können eine Karte verwenden, um Informationen von db zu speichern und zurückzuholen. Denken Sie daran, da Sie Map benutzen, wird es Schwierigkeiten beim 2-Wege-Mapping geben (das war ab 3.3, nicht sicher, ob es in späteren Releases behoben wurde)

    
Anantha Sharma 19.12.2012 06:32
quelle

Tags und Links