Hibernate Tools and the ever changing database我目前正在使用Hibernate Tools 3.1; 我自定义了命名约定和DAO模板。 数据库(SQL Server 2005)处于早期开发阶段,我负责重建映射,实体,DAO,配置等。 每次我必须对表进行反向工程时,都会丢失对映射(* .hbm.xml文件)所做的所有自定义操作,例如调整标识列,选择equals和toString中使用的字段。 我当时正在考虑将diff XML写入文件中,然后将其"合并"到生成的映射中(请参阅我的相关问题),但我想知道……是否有最佳实践/工具来应对这些令人讨厌,不可避免,关键的问题 任务? 我强烈建议您不要进行持续的逆向工程。逆向工程是一件伟大的事情,但是需要将更改作为对hbm和数据库的更改进行管理。 我们使用迁移来管理数据库更改,并将相关的更改包括在hbm中。如果Hibernate拥有它(我相信确实如此),则您可能希望查看注释而不是hbm,它们可以更容易维护。 这是迟到了两年半的时间,但是我会提出不同意见。您应该能够通过hibernate.reveng.xml文件或自定义的ReverseEngineeringStrategy对映射文件进行所需的任何自定义。对于类本身,您应该始终生成基类,并使用包含自定义代码的类扩展它们。 例如,生成com.company.vo.genic.CustomerGenerated并使用com.company.vo.custom.Customer对其进行扩展。代码生成应该覆盖生成的包中的所有类,但不能覆盖自定义包中的所有类(尽管您可以让Hibernate Tools在目标目录中生成这些自定义类,以便您可以根据需要将空白复制并粘贴到自定义目录中)。这样,您可以覆盖自定义类中的equals,toString等方法,并且在重新生成时不会丢失更改。另请注意,最佳实践是不要将生成的代码签入SCM。 这个站点上有一些很棒的例子,说明如何使用Maven,Hibernate3插件和build helper插件来实现这一目标。其中大多数都有Pascal Thivent提供的非常有用的答案。这种方法对我来说效果很好,虽然有一些学习过程,但是能够通过单个Maven命令将数据库更改传播到应用程序是一件很棒的事情。 |