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

有帮助吗?

解决方案

我强烈建议不要持续进行逆向工程。逆向工程是一件很棒的一次性事情,但更改需要像对 hbm 和数据库的更改一样进行管理。

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

其他提示

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

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

此站点上有一些很好的示例,说明如何使用 Maven、Hibernate3 插件和构建帮助程序插件来实现此目的。帕斯卡·蒂文特 (Pascal Thivent) 为其中大多数提供了非常有用的答案。这种方法对我来说效果很好,虽然有一些学习曲线,但能够使用单个 Maven 命令将数据库更改传播到应用程序是一件很棒的事情。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top