首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Hibernate (hbm2ddl)克隆表的定义

用Hibernate (hbm2ddl)克隆表的定义
EN

Stack Overflow用户
提问于 2009-08-06 14:55:15
回答 1查看 1.9K关注 0票数 2

在我的hibernate应用程序中,有注释驱动的对象: AuditEvent。它非常简单,没有外键关系。我通过将旧条目移到另一个表OldAuditEvent来存档这个表中的旧条目,它是AuditEvent表的一个克隆。

现在,我们使用hbm2ddl (在带注释的数据模型上)为整个应用程序生成DDL,并手动复制/粘贴AuditEvent表并更改其名称以创建OldAuditEvent。

我想要自动化构建过程,有没有办法告诉hbb2ddl:“嘿,接受这个实体,将表名更改为X并重新生成它的DDL"?

更新:我能够通过您描述的方法来完成这个任务。唯一的麻烦是在AnnotationSessionFactoryBean上,因为它是一个工厂豆,春天只会给你它的工厂的输出。我创建了ConfigExposingAnnotationSessionFactoryBean (扩展AnnotationSessionFactoryBean),以便通过静态(某种程度上是黑客)公开bean工厂,但我所要做的只是运行一个构建时任务。

代码语言:javascript
复制
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(";");
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-08-06 18:02:49

这是可行的,但相当混乱,很可能,在这种情况下,不值得这样做。

在构建Hibernate之前,您需要动态地更改Hibernate的配置对象。我使用的是Spring,这可以通过重写AnnotationSessionFactoryBeanAnnotationSessionFactoryBean方法来完成;否则,您只需要在调用Configuration对象之前使用Configuration对象来完成它。

您可以通过configuration.getMappings()访问类/表映射。然后,您需要通过getTable()找到表映射,通过addTable()创建一个具有新名称的副本,并通过表API复制所有列/键。

然后,您可以通过generateSchemaCreationScript()Configuration对象的generateSchemaUpdateScript()方法生成DDL脚本。

正如我所说,在这种情况下可能不值得:-)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1239450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档