Hibernate反向工程 使用试例
2015-10-21 16:10
267 查看
MyEclipse中的hibernate反向工程可以根据数据表自动为我们生成实体类,提高工作效率。
但是,hibernate中单向一对多,多对一,双向多对一关联底层的数据库结构是一样,
双向一对一,单向一对一关联的底层数据库也差不多。
所以在进行反向生成实体类时候需要在生成过程中进行一些设置来生成我们需要的关联关系。
首先必须在myeclipse中建立数据库连接和配置好hibernate环境,
Hibernate反向生成步骤:
在DB Browser中打开数据库连接选中要反向生成的表,单击右键,选择Hibernate Reverse Engineering。
注意:如果要生成单向的关联,只能逐个逐个表这样生成,如果同时选择多个,会自动生成双向的关联。
![](http://my.csdn.net/uploads/201206/18/1340020606_4013.jpg)
弹出以下对话框:
![](http://my.csdn.net/uploads/201206/18/1340021204_8956.jpg)
next:
![](http://my.csdn.net/uploads/201206/18/1340021236_7715.jpg)
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(这里是配置关联关系的关键):
![](http://my.csdn.net/uploads/201206/18/1340021310_3899.jpg)
这个说明以下各参数的作用:
Table details
这里下面可以定义实体类
Include referenced tables (A->B)
同时生成这个表引用的另外一个表的实体类
Include referenced tables (A<-B)
同时生成引用这个表的另外一个表的实体类
Generate support for ListedTable(fk)->UnlistedTable:
如果当前表格是一个从表,生成当前从表实体类到主表实体类访问
Generate support for UnlistedTable(fk)<- ListedTable:
如果当前实体类是一个主表,生成当前实体类到从表实体类访问
下面举例说明一下:
单向一对多关联,man访问多个phone
生成man实体类时候的设置(在生成的Man.hbm.xml中还需要把<set>中inverse=“true”删除):
![](http://my.csdn.net/uploads/201206/18/1340029590_2204.jpg)
生成phone实体类时候的设置(勾选Exclude column from reverse engineering表示实体类中不生成manId属性):
![](http://my.csdn.net/uploads/201206/18/1340029594_6912.jpg)
单向多对一关联,多个phone可以访问man
生成man实体类时候的设置:
![](http://my.csdn.net/uploads/201206/18/1340029598_2764.jpg)
生成phone实体类时候的设置:
![](http://my.csdn.net/uploads/201206/18/1340029602_8442.jpg)
双向一对多关联:
同时选中man和phone表,反向生成时候同时勾选Generate support for ListedTable(fk)->UnlistedTable和Generate support for UnlistedTable(fk)<- ListedTable就可以了,系统会默认让多的一端控制关联关系。
总结:反向生成实体类后还应该检查一下生成的实体类和配置文件是否符合要求,是否需要改动。
但是,hibernate中单向一对多,多对一,双向多对一关联底层的数据库结构是一样,
双向一对一,单向一对一关联的底层数据库也差不多。
所以在进行反向生成实体类时候需要在生成过程中进行一些设置来生成我们需要的关联关系。
首先必须在myeclipse中建立数据库连接和配置好hibernate环境,
Hibernate反向生成步骤:
在DB Browser中打开数据库连接选中要反向生成的表,单击右键,选择Hibernate Reverse Engineering。
注意:如果要生成单向的关联,只能逐个逐个表这样生成,如果同时选择多个,会自动生成双向的关联。
![](http://my.csdn.net/uploads/201206/18/1340020606_4013.jpg)
弹出以下对话框:
![](http://my.csdn.net/uploads/201206/18/1340021204_8956.jpg)
next:
![](http://my.csdn.net/uploads/201206/18/1340021236_7715.jpg)
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(这里是配置关联关系的关键):
![](http://my.csdn.net/uploads/201206/18/1340021310_3899.jpg)
这个说明以下各参数的作用:
Table details
这里下面可以定义实体类
Include referenced tables (A->B)
同时生成这个表引用的另外一个表的实体类
Include referenced tables (A<-B)
同时生成引用这个表的另外一个表的实体类
Generate support for ListedTable(fk)->UnlistedTable:
如果当前表格是一个从表,生成当前从表实体类到主表实体类访问
Generate support for UnlistedTable(fk)<- ListedTable:
如果当前实体类是一个主表,生成当前实体类到从表实体类访问
下面举例说明一下:
单向一对多关联,man访问多个phone
生成man实体类时候的设置(在生成的Man.hbm.xml中还需要把<set>中inverse=“true”删除):
![](http://my.csdn.net/uploads/201206/18/1340029590_2204.jpg)
生成phone实体类时候的设置(勾选Exclude column from reverse engineering表示实体类中不生成manId属性):
![](http://my.csdn.net/uploads/201206/18/1340029594_6912.jpg)
单向多对一关联,多个phone可以访问man
生成man实体类时候的设置:
![](http://my.csdn.net/uploads/201206/18/1340029598_2764.jpg)
生成phone实体类时候的设置:
![](http://my.csdn.net/uploads/201206/18/1340029602_8442.jpg)
双向一对多关联:
同时选中man和phone表,反向生成时候同时勾选Generate support for ListedTable(fk)->UnlistedTable和Generate support for UnlistedTable(fk)<- ListedTable就可以了,系统会默认让多的一端控制关联关系。
总结:反向生成实体类后还应该检查一下生成的实体类和配置文件是否符合要求,是否需要改动。
相关文章推荐
- SVN各种错误提示产生原因及处理方法大全(转)
- Jersey VS Django-Rest
- Oracle大表清理truncate .. reuse storage
- Zuma
- 黑马程序员——多态
- 好用的开源轻量级DHCP和DNS服务软件“Dual DHCP DNS Server”
- Objective-C 程序设计 第五章
- Android中ProgressBar样式
- 我的常用Linux命令
- Android onMesure 用法简介
- ConnectionTimeOut和SocketTimeOut的区别
- 正则表达式应用
- 转:mac下安装homebrew
- 互联网行星1 楔子
- 获取系统资源APP
- angularjs和ajax的结合使用 (一)
- Qt UI界面改了,但UI界面不更新
- java拾遗之关键字while
- oracle通配符过滤(模糊匹配)
- 以強勢接口支持<強龍/地頭蛇>分工模式