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