私の休止状態のアプリケーションには、アノテーション駆動型オブジェクトAuditEventがあります。その非常に単純で、外部キーの関係はありません。このテーブルの古いエントリを、 AuditEventテーブルのクローンである別のテーブルOldAuditEventに移動してアーカイブします。
現在、hbm2ddl(注釈付きデータモデル上)を使用してアプリケーション全体のDDLを生成し、AuditEventテーブルを手動でコピーして貼り付け、名前を変更してOldAuditEventを作成します。
ビルドプロセスを自動化したいのですが、hbb2ddlに「このエンティティを取得し、テーブル名をXに変更して、DDLを再生成する」ように指示する方法はありますか?
更新:あなたが概説したアプローチによってこれを機能させることができました。唯一の問題は、AnnotationSessionFactoryBeanを取得することでした。これは、ファクトリBeanであり、Springはファクトリの出力のみを提供するためです。ConfigExposedAnnotationSessionFactoryBean(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(";");
}
}