关于java:Hibernate Tools和不断变化的数据库

关于java:Hibernate Tools和不断变化的数据库

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命令将数据库更改传播到应用程序是一件很棒的事情。


推荐阅读

    linux操作数据库命令?

    linux操作数据库命令?,地址,服务,系统,密码,数据库,工具,名字,首页,命令,参

    linux数据库升级命令?

    linux数据库升级命令?,系统,信息,时间,最新,网络,名字,地址,管理,简介,传播,l

    配置linux命令行颜色?

    配置linux命令行颜色?,系统,地址,电脑,分析,代码,信息,设备,终端,颜色,命令,L

    linux配置相关的命令?

    linux配置相关的命令?,网络,地址,系统,工具,代码,状态,命令,信息,管理,初级,

    数据库导出linux命令?

    数据库导出linux命令?,密码,数据,数据库,情况,地址,系统,工具,网上,名字,命

    linux配置网卡的命令?

    linux配置网卡的命令?,网络,信息,系统,工具,代码,地址,设备,工作,电脑,最新,i

    配置网关的命令linux?

    配置网关的命令linux?,地址,系统,网络,代码,信息,环境,命令,网关,服务,电脑,

    linux配置ip命令行?

    linux配置ip命令行?,地址,系统,代码,网络,设备,工具,服务,密码,命令,网卡,lin

    linux配置文件夹命令?

    linux配置文件夹命令?,地址,系统,工作,信息,命令,标准,服务,名称,位置,文件,l

    linux恢复数据库命令?

    linux恢复数据库命令?,工具,系统,软件,数据,盘中,密码,命令,备份,数据库,文

    查询linux配置的命令?

    查询linux配置的命令?,系统,网络,地址,情况,信息,电脑,中科,状态,服务,命令,

    查询linux配置的命令?

    查询linux配置的命令?,系统,网络,地址,情况,信息,电脑,中科,状态,服务,命令,

    linux命令大全数据库?

    linux命令大全数据库?,服务,系统,平台,状态,软件,通用,环境,数据,神州,地址,

    linux命令重命名配置?

    linux命令重命名配置?,图片,名称,名字,文件,软件,代码,命令,文件名,脚本,批

    linux配置双ip命令?

    linux配置双ip命令?,地址,系统,代码,网络,设备,信息,中心,电脑,密码,命令,Lin

    linux上数据库的命令?

    linux上数据库的命令?,服务,系统,信息,地址,命令,密码,工具,管理,数据,单位,

    linux命令dm数据库?

    linux命令dm数据库?,地址,软件,时间,设备,名字,服务,位置,名称,公司,命令,lin

    linux配置自定义命令?

    linux配置自定义命令?,服务,系统,状态,策略,周期,地方,标准,新增,环境,工具,L

    linux双网卡配置命令?

    linux双网卡配置命令?,网络,状态,地址,信息,通信,标准,通讯,对外,机电,环境,L

    linux数据库查找命令?

    linux数据库查找命令?,位置,名称,状态,服务,软件,信息,系统,命令,名字,密码,