В моем приложении hibernate есть объект, управляемый аннотациями: AuditEvent . Это очень просто и не имеет отношения к внешнему ключу. Я архивирую старые записи в этой таблице, перемещая их в другую таблицу OldAuditEvent , которая является клоном таблицы AuditEvent .
Сейчас мы генерируем DDL для всего приложения, используя hbm2ddl (в нашей аннотированной модели данных), вручную копируем / вставляем таблицу AuditEvent и меняем ее имя, чтобы создать OldAuditEvent .
Я хочу автоматизировать процесс сборки, есть ли способ сказать hbb2ddl: "Эй, возьми эту сущность, измени имя таблицы на X и восстанови ее DDL"?
Обновление :
Я смог добиться этого с помощью подхода, который вы изложили. Единственная проблема заключалась в получении объекта AnnotationSessionFactoryBean, поскольку он является фабричным компонентом, а пружина выдаст вам только результаты своей фабрики. Я создал ConfigExposingAnnotationSessionFactoryBean (расширяющий AnnotationSessionFactoryBean), чтобы представить фабрику bean-компонентов с помощью статического взлома, но все, что я хочу сделать, - это запустить задачу во время сборки.
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(";");
}
}