2

这个问题已被问过几次,但大多数答案都是几年前的,所以我会发布这个希望有人找到答案。

问题:我们有一个生产实时系统,目前与 hibernate 4/jboss/etc 配合得很好。问题是我们的一些生产站点与使用相同数据库并在新表中创建数据的旧系统集成。

我们已被要求从我们的系统中针对这些表格采取行动。不幸的是,这些遗留系统的工作方式,我无法定义默认实体类型来匹配这些表,并且表名/列差异很大。

我能做的是找到表的名称。

我不能做的是让休眠状态像我想要的那样管理这些表。上周我一直在寻找解决方案,但我遇到的最大问题是实体管理器在实例化后是不可变的。

较早的 stackoverflow 问题: 在 Hibernate 中即时添加表和列?

有没有人暗示我可以在哪里实现这个要求?

提前致谢。

4

1 回答 1

0

这是可行的方法的概述。基本上,您将使用 Hibernate 的逆向工程工具来生成类文件,然后即时编译它们,然后用它们创建一个新的配置并使用它来生成一个新的 EntityManager。

Hibernate 逆向工程

Hibernate 提供了一组IDE 和 Ant 工具,用于逆向工程和代码生成,其中包括可以基于数据库定义生成代码。通常,他们的期望是人们将基于数据库生成代码/映射文件,或者生成一次,或者在构建期间生成。您想要做的是从您正在运行的程序中生成这些工件,这绝对是标签外的使用。我将从Ant 任务开始。此步骤的最终目标是生成代表数据库中表内容的 POJO。

进程编译

现在您已经获得了 Java 文件,您需要编译它们。有关使用在文件上运行 javac的示例,请参阅此问题。Process如果您将它们编译到您的类路径中,它们将可用于您的进程

构建新配置

在生成 POJO 时使用该ejb3=true标志,您应该知道能够将它们添加到Configuration已注释的对象中。我不确定对您来说真正识别新生成的类的最佳方法是什么,以便您可以.addAnnotatedClass(). 最好从 hbm2java 捕获输出,或者扫描输出文件夹以查找新的 Java 文件,或者您的程序可以“了解”新实体的另一种方式。在任何情况下,您都可以使用它Configuration来创建一个EntityManager映射到您的新数据库结构的新数据库。

于 2013-07-01T02:19:47.383 回答