在我的休眠应用程序中有注释驱动对象:AuditEvent。它非常简单,没有外键关系。我通过将旧条目移动到另一个表OldAuditEvent来归档该表中的旧条目,该表是AuditEvent表 的克隆。
现在,我们使用 hbm2ddl(在我们的注释数据模型上)为整个应用程序生成 DDL,并手动复制/粘贴 AuditEvent 表并更改其名称以创建OldAuditEvent。
我想自动化构建过程,有什么方法可以告诉 hbb2ddl:“嘿,拿这个实体,将表名更改为 X 并重新生成它的 DDL”?
更新:我能够通过您概述的方法来完成这项工作。唯一的麻烦在于 AnnotationSessionFactoryBean 因为它是一个工厂 bean,而 spring 只会给你它工厂的输出。我创建了 ConfigExposingAnnotationSessionFactoryBean(扩展 AnnotationSessionFactoryBean)以通过静态公开 bean 工厂——有点像 hack,但我想要做的就是运行构建时任务。
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(";");
}
}