生成Hibernate hbm xml文件&现有数据库模式中的实体类

时间:2009-07-13 15:32:30

标签: hibernate hbm

如何生成Hibernate hbm xml文件&现有数据库模式中的实体类?

4 个答案:

答案 0 :(得分:3)

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


实际上,我在我们的大项目面临着一个有趣的挑战(接近800个桌子,数据库驱动的团队)

  • 新表会一直到达,所以我可以从数据库中生成它们 (使用HibernateTools,并生成Annotated Entities)(我们现在实际上正在使用另一个进程......)
  • 但是大部分表都不是新的,我已经有了java实现和.hbm.xml。 两者有时都是从它们最初生成的数据库中修改过来的,因此不可能在保证不重新生成的情况下重新生成它们。 我需要迁移实体,尽可能少地改变(即只有注释)!

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

      注意:两个实体无法使用生成的完整构造函数进行编译,它们打破了256个参数限制!但是我虽然这个构造函数无论如何都没用,谁能记住256个参数的顺序,所以我把它删除了。

    • 我还想将我的集合迁移到通用集合(除了我现在没有打扰的setter)。

对于映射迁移,我使用了Hibernate Tools(根据需要自定义,模板和代码),如下所示:

  • 信息来源是.hbm.xml文件,带有hibernate.cfg.xml文件

    注意:我必须首先解压缩hibernate.cfg.xml,替换用于包含列表的spring bean。但这对于像Squirrel这样的数据库工具也很有用,可以使用它来启用HQL ...

  • 生成的输出是X2.java文件(对于X.java类,在同一个包中),只包含字段,getter和注释 (没有制定者或构造者)(通用集)

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

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

对于好奇的人来说,这个月我们接近200个带注释的实体:-)。 典型的100字段实体需要大约30分钟的迁移工作。 剩下的600个实体只剩下300个小时来完成这个cut'n粘贴! ; - )

答案 1 :(得分:1)

我建议Hibernate Tool

答案 2 :(得分:1)

您应该使用hibernate逆向工程工具。有关详细信息,请参阅hibernate reverse engineering tools documentation

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

答案 3 :(得分:0)

Netbeans具有生成配置文件,带注释文件和更多

的功能