Question

Dans ma demande de mise en veille prolongée il y a annotation objet entraîné: AuditEvent . Il est très simple et n'a pas de relations clés étrangères. Archiver les anciennes entrées dans ce tableau en les déplaçant vers une autre table OldAuditEvent , qui est un clone du AuditEvent table.

En ce moment, nous générons le DDL pour l'application entière à l'aide hbm2ddl (sur notre modèle de données annoté) et les copier manuellement / coller la table AuditEvent et changer son nom pour créer OldAuditEvent .

Je veux automatiser le processus de construction, est-il possible de dire hbb2ddl: « hey prendre cette entité, changer le nom de la table à X et régénèrent il est LDD »

Mise à jour : J'ai pu obtenir ce travail par l'approche que vous avez décrit. Le seul problème se faisait au AnnotationSessionFactoryBean car il est un haricot de l'usine et le printemps ne vous donnera la sortie de son usine. J'ai créé ConfigExposingAnnotationSessionFactoryBean (extension AnnotationSessionFactoryBean) pour exposer l'usine de haricots à travers une statique -. Sorte d'un hack, mais tout ce que je veux faire est de lancer une tâche de temps de construction

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(";");
    }
}
Était-ce utile?

La solution

Il est faisable, mais plutôt en désordre et, très probablement, pas la peine dans ce cas.

Vous aurez besoin de modifier dynamiquement objet avant SessionFactory est construit. Je vous utilisez Spring, cela peut être fait en remplaçant la méthode de postProcessAnnotationConfiguration() de AnnotationSessionFactoryBean; sinon vous aurez juste besoin de le faire en utilisant votre objet Configuration avant d'invoquer buildSessionFactory() dessus.

Vous pouvez obtenir l'accès aux applications de classe / table via configuration.getMappings(). Vous aurez alors besoin de trouver votre mappage de table via getTable(), créez une copie avec le nouveau nom via addTable() et de reproduire toutes les colonnes / clés via Tableau API .

Vous pouvez ensuite générer le script via DDL méthodes de generateSchemaCreationScript() ou generateSchemaUpdateScript() d'objet Configuration.

Comme je l'ai dit, sans doute pas la peine dans ce cas :-)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top