MyEclipse中的hibernate反向工程可以根据数据表自动为我们生成实体类,提高工作效率。
但是,hibernate中单向一对多,多对一,双向多对一关联底层的数据库结构是一样,
双向一对一,单向一对一关联的底层数据库也差不多。
所以在进行反向生成实体类时候需要在生成过程中进行一些设置来生成我们需要的关联关系。
首先必须在myeclipse中建立数据库连接和配置好hibernate环境,
详细可参考:http://blog.csdn.net/fycheung/article/details/7672854
然后就可以开始进行反向生成,
这里以man和phone为例子进行单向man关联多个phone,单向多个phone关联一个man,多个phone和一个man互相关联的反向实体生成。
数据库表的结构:
反向生成步骤:
在DB Browser中打开数据库连接选中要反向生成的表,单击右键,选择Hibernate Reverse Engineering。
注意:如果要生成单向的关联,只能逐个逐个表这样生成,如果同时选择多个,会自动生成双向的关联。
弹出以下对话框:
next:
Generate basic typed composite IDs:
如果数据库表格包含有多个列的主键, 将总是使用 <复合主键> 映射.
Generate version and timestamp tags:
如果启用, 名为 "version" 和 "timestamp" 的列将会在生成的映射文件中作为 <version> 和 <timestamp> 标记出现.
Enable many-to-many detection:
如果有连接表则生成双向多对多关联
Customized Type Mappings:
允许你来指定一个自定义的 JDBC 类型到 Hibernate 类型的转换, 使用 Length, Scale, Precision 和 Nullability 作为精度控制对应原来的 JDBC 类型.
next(这里是配置关联关系的关键):
这个说明以下各参数的作用:
Table details
这里下面可以定义实体类
Include referenced tables (A->B)
同时生成这个表引用的另外一个表的实体类
Include referenced tables (A<-B)
同时生成引用这个表的另外一个表的实体类
如果当前表格是一个从表,生成当前从表实体类到主表实体类访问
Generate support for UnlistedTable(fk)<- ListedTable:
如果当前实体类是一个主表,生成当前实体类到从表实体类访问
下面举例说明一下:
单向一对多关联,man访问多个phone
生成man实体类时候的设置(在生成的Man.hbm.xml中还需要把<set>中inverse=“true”删除):
生成phone实体类时候的设置(勾选Exclude column from reverse engineering表示实体类中不生成manId属性):
![](https://img-my.csdn.net/uploads/201206/18/1340029594_6912.jpg)
单向多对一关联,多个phone可以访问man
生成man实体类时候的设置:
生成phone实体类时候的设置:
![](https://img-my.csdn.net/uploads/201206/18/1340029602_8442.jpg)
双向一对多关联:
同时选中man和phone表,反向生成时候同时勾选Generate support for ListedTable(fk)->UnlistedTable和Generate support for UnlistedTable(fk)<- ListedTable就可以了,系统会默认让多的一端控制关联关系。总结:反向生成实体类后还应该检查一下生成的实体类和配置文件是否符合要求,是否需要改动。