1

我目前正在使用 Hibernate Tools 3.1;我自定义了命名约定和 DAO 模板。数据库(SQL Server 2005)处于早期开发阶段,我负责重建映射、实体、DAO、配置等。每次我必须对表进行逆向工程,因此我会丢失对映射(*.hbm.xml 文件)所做的所有自定义,例如调整标识列、选择equalstoString中使用的字段。我正在考虑将 diff XML 写入文件并将其“合并”到生成的映射中(请参阅我的相关问题),但我想知道......是否有任何最佳实践/工具来处理这些烦人的、不可避免的、关键的任务?

4

2 回答 2

2

我强烈建议不要进行持续的逆向工程。逆向工程是一件好事,但需要将更改作为对 hbm 和数据库的更改进行管理。

我们使用迁移来管理数据库更改,并将相关更改包含在 hbm.xml 中。如果 Hibernate 有它(我相信它有),您可能想要查看注释而不是 hbm,它们可以更容易维护。

于 2008-09-17T07:21:11.030 回答
1

这已经晚了两年半,但我会提出不同的意见。您应该能够通过 hibernate.reveng.xml 文件或自定义 ReverseEngineeringStrategy 对映射文件进行所需的任何自定义。对于类本身,您应该始终生成基类并使用包含自定义代码的类扩展它们。

例如,生成 com.company.vo.generated.CustomerGenerated 并使用 com.company.vo.custom.Customer 对其进行扩展。代码生成应该覆盖生成的包中的所有类,但永远不会覆盖自定义包中的类(尽管您可以让 Hibernate 工具在目标目录中生成这些自定义类,以便您可以根据需要将空白复制并粘贴到自定义目录中)。这样,您可以覆盖自定义类中的 equals、toString 等方法,并且在重新生成时不会丢失您的更改。另请注意,最佳做法是不要将生成的代码签入 SCM。

这个网站上有一些很好的例子,说明如何使用 Maven、Hibernate3 插件和构建助手插件来实现这一点。其中大部分都有 Pascal Thivent 非常有用的答案。这种方法对我来说效果很好,虽然有一点学习曲线,但能够使用单个 Maven 命令将数据库更改传播到应用程序是一件很棒的事情。

于 2011-03-22T08:52:04.587 回答