【问题标题】:Generating Hibernate hbm xml files & entities classes from existing DB schema从现有的 DB 模式生成 Hibernate hbm xml 文件和实体类
【发布时间】:2013-04-10 20:48:33
【问题描述】:

如何从现有的 DB 模式生成 Hibernate hbm xml 文件和实体类?

【问题讨论】:

    标签: hibernate hbm


    【解决方案1】:

    我非常高兴地使用了 Hibernate 工具(在他们的网站上提供了示例)。 下面,我将详细介绍我的具体、高级和有趣(我认为)的用例。


    实际上,我在我们的大项目(接近 800 个表,数据库驱动的团队)中遇到了一个有趣的挑战

    • 新表会不断出现,所以我可以从数据库中生成它们 (使用 HibernateTools,并生成带注释的实体)(我们现在实际上正在使用另一个进程......)
    • 但是大多数表并不是新的,我已经有了 java 实现和 .hbm.xml。 两者有时都是从最初生成它们的数据库中修改的,因此不可能在保证不破坏任何东西的情况下重新生成它们。 我需要迁移实体,尽可能少地改变(也就是说,只有注释)!

      • 这也需要很快,因为我们典型的旧实体有大约 100 个成员(自己的 db 列,加上来自反向外键的实体集合!)。

        注意:两个实体无法使用生成的完整构造函数进行编译,它们超出了 256 个参数的限制!但是我虽然这个Constructor反正没用,谁记得256个参数的顺序,所以我把它去掉了。

      • 我还想将我的 Set 迁移到通用 Set(除了我暂时不关心的 setter)。

    对于映射迁移,我使用了 Hibernate Tools(按需定制,模板和代码)如下:

    • 信息的来源是 .hbm.xml 文件,以及 hibernate.cfg.xml 文件

      注意:我必须先提取 hibernate.cfg.xml,替换用于包含列表的 spring bean。但这对于 Squirrel 等数据库工具也很有用,可以使用它来启用 HQL 补全……

    • 生成的输出是仅包含字段、getter 和注释的 X2.java 文件(对于 X.java 类,在同一个包中) (没有设置器或构造器)(泛型集)

    我会使用 Eclipse 编译器(错误“重复...”)来仔细检查我的编辑,以使其更快,更不容易出错(错误不是一种选择,我们有很多客户端在生产中!)。对于每个迁移的类,我会从生成的类复制到现有类:

    • 更改 persistence.cfg.xml 以使用类而不是 .hbm.xml
    • 在类名前剪切并粘贴@Entity
    • 在现有字段之后剪切并粘贴所有 Set 字段,仅删除存在编译错误的现有字段(结果是我现在有了具有通用 Set 的字段)
    • 在现有的 setter 之后剪切并粘贴所有 getter(这是类的其余部分)
    • 打开大纲视图,仅显示不以“set”开头的公共动态方法,按字母顺序排序
    • 检查每个没有错误的getter(调查是否有问题,或者它已经被丢弃...)
    • 按照大纲视图,只考虑错误的方法,按顺序为每个 getter : 删除方法的第二个实例,将其注解复制到第一个实例 (使用大纲视图导航)(保留了类中方法的顺序,这对 CVS 历史很重要,特别是在向不信的人证明迁移没有破坏他们的代码,它之前已经被破坏了!)。
    • ...一些细节有待进一步讨论...

    出于好奇,本月我们接近 200 个带注释的实体 :-)。 典型的 100 个字段实体需要大约 30 分钟的工作才能迁移。 剩下 300 小时来完成剩下的 600 个实体的剪切粘贴! ;-)

    【讨论】:

    • "注意:两个实体不能用生成的完整构造函数编译,它们打破了 256 个参数的限制!但我虽然这个构造函数无论如何都没用,谁能记住 256 个参数的顺序,所以我把它去掉了。” - 如何??你只是在构建后删除它吗?你知道如何在 hbm 中指定不应生成完整构造函数吗?
    【解决方案2】:

    您应该为此使用休眠逆向工程工具。请参阅hibernate reverse engineering tools documentation 了解更多信息。

    我不清楚如何生成 JPA 带注释的类,但如果这是一个新项目,您可能想考虑不再使用 hbm.xml 文件,支持注释。

    【讨论】:

    • 您的链接似乎已损坏。我找到了一些可能相关的链接,但我不确定哪一个是最好的。您能找回它并修复损坏的链接吗?谢谢
    【解决方案3】:

    我会推荐Hibernate Tool

    【讨论】:

      【解决方案4】:

      Netbeans 具有生成配置文件、注释文件等功能

      【讨论】:

        猜你喜欢
        • 2012-02-24
        • 2011-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-23
        • 1970-01-01
        • 2018-02-01
        • 1970-01-01
        相关资源
        最近更新 更多