Ich habe eine Datenklasse für Hibernate, die einer Tabelle zugeordnet ist. Stellen Sie sich die Entität Person so vor:
%Vor%Ich muss historische Tabellen nach Jahren dieser Tabelle erstellen : Person2010, Person2011, Person2012 ... Ist es möglich, ohne neue Datenobjekte zu erstellen? Vielleicht durch einen Parameter ...? Ich weiß es nicht.
Die Entity-Klasse ist dieselbe und ändert den Tabellennamen und den Konstruktor.
Eine andere Architektur, komplizierter aber elegant:
YES , Sie können die Tabellennamen mithilfe von NamingStrategies ändern:
%Vor%Und wenn Sie die _year -Tabellen verwenden möchten, müssen Sie eine Sitzung mit Hibernate erstellen, die die Tabellennamen überschreibt:
%Vor%Für meine Architektur erstelle ich eine Sitzung nach Jahr und speichere sie in der Anwendungszuordnung für den Zugriff, wenn ich sie brauche.
Danke.
Sie sollten Hibernate Envers für historische Daten ausprobieren.
In Hibernate ordnen Sie 1 Klasse einer Tabelle zu. Sie können dieselbe Entität nicht für die dynamische Zuordnung mehrerer Tabellen verwenden.
Hibernate Envers ist eine ziemlich gute Lösung für historische Daten, aber Sie werden immer noch nicht in der Lage sein zu tun, was Sie versuchen (dynamisch Erhöhen Sie die Anzahl der Tabellen, ohne Mapper Entities zu berühren.)
Dank @CodeBrickie und @edutesoey habe ich Envers gefunden.
Ich konfiguriere die Hibernate-Konfigurationsdatei mit dem AUD-Suffix und erstelle neue Hibernate-Konfigurationsdateien pro Jahr (hibernate.cfg.2009.xml, hibernate.cfg.2010.xml, hibernate.cfg.2011.xml ...) mit das Jahr-Suffix.
Wenn ich Daten speichere, wird immer in AUD-Tabelle geprüft. Am 1. Januar automatisch:
Wenn ich Daten abrufen muss, lade ich die entsprechende Hibernate-Konfigurationsdatei.
Hoffe das hilft anderen:)
Modifiziert zur Laufzeit (ich denke es ist der beste Weg):
%Vor%Tags und Links java hibernate annotations