gpt4 book ai didi

hibernate - 从现有的 DB 模式生成 Hibernate hbm xml 文件和实体类

转载 作者:行者123 更新时间:2023-12-03 08:16:08 25 4
gpt4 key购买 nike

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

最佳答案

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

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

  • 新表会不断出现,所以我可以从数据库中生成它们
    (使用 HibernateTools,并生成带注释的实体)(我们现在实际上正在使用另一个进程...)
  • 但是大多数表并不是新的,我已经有了 java 实现和 .hbm.xml。
    有时两者都从它们最初生成的数据库中进行了修改,因此不可能在保证不破坏任何东西的情况下重新生成它们。 我需要迁移实体,尽可能少地改变(即只有注释)!
  • 这也需要很快,因为我们典型的旧实体有大约 100 个成员(自己的 db 列,加上来自反向外键的实体集合!)。

    注意:两个实体无法使用生成的完整构造函数进行编译,它们超出了 256 个参数的限制!但是我虽然这个Constructor无论如何都没用,谁记得256个参数的顺序,所以我把它去掉了。
  • 我还想将我的 Set 迁移到通用的(除了我现在不关心的 setter)。

  • 对于映射迁移,我使用了 Hibernate Tools(根据需要自定义,模板和代码),如下所示:
  • 信息的来源是 .hbm.xml 文件,以及 hibernate.cfg.xml 文件

    注意:我必须先提取 hibernate.cfg.xml,替换用于包含列表的 spring bean。但这对于 Squirrel 等数据库工具也很有用,可以使用它来启用 HQL 补全...
  • 生成的输出是仅包含字段、getter 和注释的 X2.java 文件(对于 X.java 类,在同一个包中)
    (没有 setter 或构造器)(泛型集)

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

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

    关于hibernate - 从现有的 DB 模式生成 Hibernate hbm xml 文件和实体类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1120188/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com