Hallo zusammen,
ich habe folgende Frage.
Kurz zum Anwendungsfall:
Ich würde gerne in einer Anwendung die Möglichkeit geben aktuelle Daten von nicht mehr aktuellen Daten zu trennen.
Es geht konkret um einen Fragebogen mit 20 Feldern.
Der Benutzer bekommt in der Anwendung eine Möglichkeit angeboten diese Trennung manuell über einen Button zu starten.
Danach steht der Datensatz aus der QUESTIONNAIRE-Tabelle in der QUESTIONNAIRE_ARCHIVE-Tabelle ergänzt um das Archivierungsdatum.
Erwartet werden etwa eine Million Einträge.
Ich habe folgende Tabellen:
QUESTIONNAIRE
QUESTIONNAIRE_ARCHIVE (hier landen die archivierten Fragebögen)
Die Struktur der Tabellen ist folgende (vereinfacht):
int id
varchar2 field_1
varchar2 field_2
...
date archive_date (nur in der Archivtabelle vorhanden)
Meine Klassenstruktur:
Code:
class Questionnaire {
private Long id;
private String field_1;
private String field_2;
...
private String field_10;
//getter und setter sind realisiert
}
Code:
class QuestionnaireArchive extends Questionnaire {
private Date archiveDate;
//getter und setter sind realisiert
}
Meine Frage ist nun, wie das Hibernate-Mapping aussehen sollte, bzw. wie es optimalerweise sein sollte um im Mapping möglichst keinen redundanten Code zu haben.
Es gibt doch sicher eine bessere Variante als die folgende, bei der man duplizieren müsste.
Code:
<hibernate-mapping>
<class name="de.test.Questionnaire" table="QUESTIONNAIRE">
<cache usage="read-write"/>
<id name="prjId" column="prj_id">
<generator class="assigned"/>
</id>
<property name="field1" column="field_1"/>
<property name="field2" column="field_2"/>
...
<property name="field10" column="field_10"/>
</class>
</hibernate-mapping>
Code:
<hibernate-mapping>
<class name="de.test.QuestionnaireArchive" table="QUESTIONNAIRE_ARCHIVE">
<cache usage="read-write"/>
<id name="prjId" column="prj_id">
<generator class="assigned"/>
</id>
<property name="field1" column="field_1"/>
<property name="field2" column="field_2"/>
...
<property name="field10" column="field_10"/>
<property name="archiveDate" column="archive_date"/>
</class>
</hibernate-mapping>
Könnte man da auch mit einer der drei Vererbungstrategien von Hibernate arbeiten und wenn ja, wie müsste man das Mapping des Archiv-Objekts modifizieren?
- Table per Concrete Class
- Table per Subclass
- Table per Class Hierarchy (müsste ausscheiden, da ich die Daten ja bewusst auf zwei Tabellen aufteilen möchte)
Besten Dank im Voraus.
Gruß,
Alex