Frage

In meiner Hibernate Anwendung gibt es Annotation angetriebenes Objekt: AuditEvent . Es ist sehr einfach und hat keine Fremdschlüsselbeziehungen. Ich archivieren alte Einträge in dieser Tabelle, indem sie an einem anderen Tisch zu bewegen OldAuditEvent , das ist ein Klon der AuditEvent Tabelle.

Im Moment wir die DDL für die gesamte Anwendung mit hbm2ddl (auf unserem kommentierten Datenmodell) und manuell kopieren / einfügen die AuditEvent Tabelle und ändern ihren Namen OldAuditEvent erstellen generieren.

Ich mag den Build-Prozess automatisieren, ist es eine Möglichkeit, hbb2ddl zu sagen: „Hey, das Unternehmen übernehmen, die Tabellennamen zu X ändern und regeneriert es ist DDL“

Aktualisieren : Ich konnte diese Arbeit bekommen durch den Ansatz, den Sie skizziert. Das einzige Problem bei der AnnotationSessionFactoryBean bekommen, da es sich um eine Fabrik Bohne ist und im Frühjahr werden Sie nur die Ausgabe der Fabrik geben. Ich habe ConfigExposingAnnotationSessionFactoryBean (Erweiterung AnnotationSessionFactoryBean) die BeanFactory durch eine statische aussetzen -. Art eines Hack, aber alles, was ich tun möchte, ist eine Build-Zeit-Task ausführen

Configuration cfg = ConfigExposingAnnotationSessionFactoryBean.s_instance.getConfiguration();

PersistentClass pClass = cfg.getClassMapping("com.myco.LoginAttempt");
pClass.getTable().setName("ArchiveLoginAttempt");

Dialect dialect = Dialect.getDialect(ConfigExposingAnnotationSessionFactoryBean.s_instance.getHibernateProperties());

// only output create tables, not indexes or FK
for (String s : cfg.generateSchemaCreationScript( dialect )) {
    if (s.contains("create table") && s.contains("Archive")) {
        m_outstream.print(s);
        m_outstream.println(";");
    }
}
War es hilfreich?

Lösung

Es ist machbar, sondern chaotisch und höchstwahrscheinlich nicht wert in diesem Fall.

Sie müssen dynamisch Hibernate Konfiguration ändern Objekt vor Session wird gebaut. Ich Sie Frühling verwenden, kann dies durch zwingende postProcessAnnotationConfiguration() Methode der AnnotationSessionFactoryBean erfolgen; sonst werden Sie es nur tun müssen, bevor Sie Configuration Objekt mit buildSessionFactory() darauf aufgerufen wird.

Sie können den Zugriff auf Klassen- / Tabellenzuordnungen über configuration.getMappings() erhalten. Sie werden dann Ihre Tabellenzuordnung über getTable() finden müssen, um eine Kopie mit neuen Namen über addTable() erstellen und replizieren alle Spalten / Tasten über Tabellen-API .

Sie können dann die DDL Skript über generateSchemaCreationScript() oder generateSchemaUpdateScript() Methoden der Configuration Objekt erzeugen.

Wie gesagt, wahrscheinlich nicht wert in diesem Fall :-)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top